stream: support keeping the service alive outside of service callback
authorMartin Willi <martin@revosec.ch>
Mon, 1 Jul 2013 12:57:28 +0000 (14:57 +0200)
committerMartin Willi <martin@revosec.ch>
Thu, 18 Jul 2013 14:00:28 +0000 (16:00 +0200)
src/libstrongswan/networking/streams/stream_service.c
src/libstrongswan/networking/streams/stream_service.h

index 7eaca86..1b06e1e 100644 (file)
@@ -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;
 }
index 27ef791..c8faba3 100644 (file)
@@ -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.