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)
|
if (stream)
|
||||||
{
|
{
|
||||||
thread_cleanup_push((void*)stream->destroy, stream);
|
thread_cleanup_push((void*)stream->destroy, stream);
|
||||||
data->cb(data->data, stream);
|
thread_cleanup_pop(!data->cb(data->data, stream));
|
||||||
thread_cleanup_pop(TRUE);
|
|
||||||
}
|
}
|
||||||
return JOB_REQUEUE_NONE;
|
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.
|
* 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 data user data, as passed during registration
|
||||||
* @param stream accept()ed client connection
|
* @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.
|
* A service accepting client connection streams.
|
||||||
|
|||||||
Reference in New Issue
Block a user