From: <svn...@op...> - 2009-03-25 08:55:20
|
Author: bellmich Date: Wed Mar 25 09:55:10 2009 New Revision: 1015 URL: http://libsyncml.opensync.org/changeset/1015 Log: SoupSession is designed for single-threaded applications. So the session cleanup must be done in the worker thread. Modified: trunk/libsyncml/transports/http_client.c Modified: trunk/libsyncml/transports/http_client.c ============================================================================== --- trunk/libsyncml/transports/http_client.c Wed Mar 25 09:54:02 2009 (r1014) +++ trunk/libsyncml/transports/http_client.c Wed Mar 25 09:55:10 2009 (r1015) @@ -375,6 +375,22 @@ return TRUE; } +static SmlBool smlTransportHttpClientCleanupSession( + gpointer data, + SmlError **error) +{ + smlTrace(TRACE_ENTRY, "%s", __func__); + CHECK_ERROR_REF + smlAssert(data); + + SoupSession *session = data; + + soup_session_abort(session); + g_object_unref(session); + + smlTrace(TRACE_EXIT, "%s", __func__); + return TRUE; +} static SmlBool smlTransportHttpClientFinalize(void *data, SmlError **error) { @@ -387,8 +403,8 @@ if (env->session) { - soup_session_abort(env->session); - g_object_unref(env->session); + if (!smlThreadCallFunction(env->tsp->thread, smlTransportHttpClientCleanupSession, env->session, error)) + goto error; env->session = NULL; } @@ -405,6 +421,9 @@ smlTrace(TRACE_EXIT, "%s", __func__); return TRUE; +error: + smlTrace(TRACE_EXIT_ERROR, "%s - %s", __func__, smlErrorPrint(error)); + return FALSE; } static void smlTransportHttpClientSend(void *userdata, void *link, SmlTransportData *data, SmlError *error) |