From: <svn...@op...> - 2009-03-26 16:38:28
|
Author: bellmich Date: Thu Mar 26 17:38:21 2009 New Revision: 1021 URL: http://libsyncml.opensync.org/changeset/1021 Log: thread safe queue detach Modified: trunk/libsyncml/sml_transport.c Modified: trunk/libsyncml/sml_transport.c ============================================================================== --- trunk/libsyncml/sml_transport.c Thu Mar 26 16:15:02 2009 (r1020) +++ trunk/libsyncml/sml_transport.c Thu Mar 26 17:38:21 2009 (r1021) @@ -1044,6 +1044,19 @@ } } +static SmlBool smlTransportDetachQueueCallback( + gpointer data, + SmlError **error) +{ + smlTrace(TRACE_ENTRY, "%s", __func__); + CHECK_ERROR_REF + smlAssert(data); + SmlQueue *queue = data; + smlQueueDetach(queue); + smlTrace(TRACE_EXIT, "%s", __func__); + return TRUE; +} + static SmlBool smlTransportDispatchQueueCallback( gpointer data, SmlError **error) @@ -1094,8 +1107,21 @@ tsp->type != SML_TRANSPORT_HTTP_SERVER && tsp->thread) _smlTransportStop(tsp); + /* stop the command queue */ + if (tsp->thread) { + /* HTTP - thread safe destroy */ + if (!smlThreadCallFunction( + tsp->thread, + smlTransportDetachQueueCallback, + tsp->command_queue, + error)) + goto error; + } else { + /* OBEX */ + smlQueueDetach(tsp->command_queue); + } + /* give all jobs a chance to finish cleanly */ - smlQueueDetach(tsp->command_queue); int i = 0; unsigned int queueLength = smlQueueLength(tsp->command_queue); for (; i < queueLength; i++) { |