stream: support keeping the service alive outside of service callback
This commit is contained in:
@@ -124,8 +124,7 @@ static job_requeue_t accept_async(async_data_t *data)
|
||||
if (stream)
|
||||
{
|
||||
thread_cleanup_push((void*)stream->destroy, stream);
|
||||
data->cb(data->data, stream);
|
||||
thread_cleanup_pop(TRUE);
|
||||
thread_cleanup_pop(!data->cb(data->data, stream));
|
||||
}
|
||||
return JOB_REQUEUE_NONE;
|
||||
}
|
||||
|
||||
@@ -39,12 +39,14 @@ typedef stream_service_t*(*stream_service_constructor_t)(char *uri, int backlog)
|
||||
/**
|
||||
* Service callback routine for accepting client connections.
|
||||
*
|
||||
* The passed stream_service gets closed/destroyed by the callback caller.
|
||||
* The passed stream gets closed/destroyed by the callback caller, unless
|
||||
* TRUE is returned.
|
||||
*
|
||||
* @param data user data, as passed during registration
|
||||
* @param stream accept()ed client connection
|
||||
* @return TRUE to keep stream alive, FALSE to destroy it
|
||||
*/
|
||||
typedef void (*stream_service_cb_t)(void *data, stream_t *stream);
|
||||
typedef bool (*stream_service_cb_t)(void *data, stream_t *stream);
|
||||
|
||||
/**
|
||||
* A service accepting client connection streams.
|
||||
|
||||
Reference in New Issue
Block a user