mirror of
https://github.com/schoebel/mars
synced 2025-04-11 03:51:40 +00:00
server: fix refcounting
This commit is contained in:
parent
54275af543
commit
5b7fabf167
@ -96,8 +96,12 @@ int cb_thread(void *data)
|
|||||||
mars_shutdown_socket(sock);
|
mars_shutdown_socket(sock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mref_a->do_put) {
|
||||||
GENERIC_INPUT_CALL(brick->inputs[0], mref_put, mref);
|
GENERIC_INPUT_CALL(brick->inputs[0], mref_put, mref);
|
||||||
atomic_dec(&brick->in_flight);
|
atomic_dec(&brick->in_flight);
|
||||||
|
} else {
|
||||||
|
mars_free_mref(mref);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mars_shutdown_socket(sock);
|
mars_shutdown_socket(sock);
|
||||||
@ -145,6 +149,7 @@ err:
|
|||||||
MARS_FAT("cannot handle callback - giving up\n");
|
MARS_FAT("cannot handle callback - giving up\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static
|
||||||
int server_io(struct server_brick *brick, struct mars_socket *sock, struct mars_cmd *cmd)
|
int server_io(struct server_brick *brick, struct mars_socket *sock, struct mars_cmd *cmd)
|
||||||
{
|
{
|
||||||
struct mref_object *mref;
|
struct mref_object *mref;
|
||||||
@ -187,7 +192,7 @@ int server_io(struct server_brick *brick, struct mars_socket *sock, struct mars_
|
|||||||
status = 0; // continue serving requests
|
status = 0; // continue serving requests
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
mref_a->do_put = true;
|
||||||
atomic_inc(&brick->in_flight);
|
atomic_inc(&brick->in_flight);
|
||||||
GENERIC_INPUT_CALL(brick->inputs[0], mref_io, mref);
|
GENERIC_INPUT_CALL(brick->inputs[0], mref_io, mref);
|
||||||
|
|
||||||
@ -213,7 +218,12 @@ void _clean_list(struct server_brick *brick, struct list_head *start)
|
|||||||
if (!mref)
|
if (!mref)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (mref_a->do_put) {
|
||||||
GENERIC_INPUT_CALL(brick->inputs[0], mref_put, mref);
|
GENERIC_INPUT_CALL(brick->inputs[0], mref_put, mref);
|
||||||
|
atomic_dec(&brick->in_flight);
|
||||||
|
} else {
|
||||||
|
mars_free_mref(mref);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@ struct server_mref_aspect {
|
|||||||
GENERIC_ASPECT(mref);
|
GENERIC_ASPECT(mref);
|
||||||
struct server_brick *brick;
|
struct server_brick *brick;
|
||||||
struct list_head cb_head;
|
struct list_head cb_head;
|
||||||
|
bool do_put;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct server_output {
|
struct server_output {
|
||||||
|
Loading…
Reference in New Issue
Block a user