stream: support keeping the service alive outside of service callback

This commit is contained in:
Martin Willi
2013-07-18 16:00:28 +02:00
parent d57b9e7c82
commit e6e8a2b2e0
2 changed files with 5 additions and 4 deletions
@@ -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.