mirror of
https://github.com/schoebel/mars
synced 2025-03-24 20:16:42 +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);
|
||||
}
|
||||
|
||||
GENERIC_INPUT_CALL(brick->inputs[0], mref_put, mref);
|
||||
atomic_dec(&brick->in_flight);
|
||||
if (mref_a->do_put) {
|
||||
GENERIC_INPUT_CALL(brick->inputs[0], mref_put, mref);
|
||||
atomic_dec(&brick->in_flight);
|
||||
} else {
|
||||
mars_free_mref(mref);
|
||||
}
|
||||
}
|
||||
|
||||
mars_shutdown_socket(sock);
|
||||
@ -145,6 +149,7 @@ err:
|
||||
MARS_FAT("cannot handle callback - giving up\n");
|
||||
}
|
||||
|
||||
static
|
||||
int server_io(struct server_brick *brick, struct mars_socket *sock, struct mars_cmd *cmd)
|
||||
{
|
||||
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
|
||||
goto done;
|
||||
}
|
||||
|
||||
mref_a->do_put = true;
|
||||
atomic_inc(&brick->in_flight);
|
||||
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)
|
||||
continue;
|
||||
|
||||
GENERIC_INPUT_CALL(brick->inputs[0], mref_put, mref);
|
||||
if (mref_a->do_put) {
|
||||
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);
|
||||
struct server_brick *brick;
|
||||
struct list_head cb_head;
|
||||
bool do_put;
|
||||
};
|
||||
|
||||
struct server_output {
|
||||
|
Loading…
Reference in New Issue
Block a user