Bugzilla – Attachment 54960 Details for
Bug 116762
Exchange crashes randomly in Tasks view
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
IDP Log In
|
Forgot Password
[patch]
new patch
libsoup-debug.diff (text/plain), 8.63 KB, created by
Dan Winship
on 2005-10-20 14:37:01 UTC
(
hide
)
Description:
new patch
Filename:
MIME Type:
Creator:
Dan Winship
Created:
2005-10-20 14:37:01 UTC
Size:
8.63 KB
patch
obsolete
>Index: libsoup/soup-connection-ntlm.c >=================================================================== >RCS file: /cvs/gnome/libsoup/libsoup/soup-connection-ntlm.c,v >retrieving revision 1.10 >diff -u -r1.10 soup-connection-ntlm.c >--- libsoup/soup-connection-ntlm.c 8 Jun 2005 14:35:47 -0000 1.10 >+++ libsoup/soup-connection-ntlm.c 20 Oct 2005 14:34:31 -0000 >@@ -28,7 +28,6 @@ > } SoupConnectionNTLMState; > > typedef struct { >- char *user; > guchar nt_hash[21], lm_hash[21]; > SoupConnectionNTLMState state; > } SoupConnectionNTLMPrivate; >@@ -56,7 +55,6 @@ > { > SoupConnectionNTLMPrivate *priv = SOUP_CONNECTION_NTLM_GET_PRIVATE (object); > >- g_free (priv->user); > memset (priv->nt_hash, 0, sizeof (priv->nt_hash)); > memset (priv->lm_hash, 0, sizeof (priv->lm_hash)); > >@@ -87,6 +85,9 @@ > char *username, *domain_username = NULL, *password = NULL; > char *slash, *domain; > >+ printf ("@@@ ntlm_authorize_pre on %p for %p, state %d\n", >+ ntlm, msg, priv->state); >+ > if (priv->state > SOUP_CONNECTION_NTLM_SENT_REQUEST) { > /* We already authenticated, but then got another 401. > * That means "permission denied", so don't try to >@@ -150,6 +151,8 @@ > * to do Basic auth too. > */ > soup_message_remove_header (msg->response_headers, "WWW-Authenticate"); >+ printf ("@@@ ntlm_authorize_pre on %p: new state is %d\n", >+ ntlm, priv->state); > } > > static void >@@ -161,8 +164,20 @@ > soup_message_get_header (msg->request_headers, "Authorization")) { > /* We just added the last Auth header, so restart it. */ > priv->state = SOUP_CONNECTION_NTLM_SENT_RESPONSE; >+ >+ /* soup_message_restarted() will call soup_message_io_stop(), >+ * which will release the connection, and may cause another >+ * message to be queued on the connection before it returns. >+ * That's no good, so we stop the message first and then >+ * reclaim the connection so that soup_message_restarted() >+ * won't be able to steal it. >+ */ >+ printf ("@@@ ntlm_authorize_post on %p...\n", conn); >+ soup_message_io_stop (msg); >+ soup_connection_reserve (conn); > soup_message_restarted (msg); > soup_connection_send_request (conn, msg); >+ printf ("@@@ ntlm_authorize_post on %p complete\n", conn); > } > } > >Index: libsoup/soup-connection.c >=================================================================== >RCS file: /cvs/gnome/libsoup/libsoup/soup-connection.c,v >retrieving revision 1.33 >diff -u -r1.33 soup-connection.c >--- libsoup/soup-connection.c 22 Aug 2005 14:28:27 -0000 1.33 >+++ libsoup/soup-connection.c 20 Oct 2005 14:34:31 -0000 >@@ -89,6 +89,8 @@ > { > SoupConnectionPrivate *priv = SOUP_CONNECTION_GET_PRIVATE (object); > >+ printf ("@@@ finalizing connection %p\n", object); >+ > if (priv->proxy_uri) > soup_uri_free (priv->proxy_uri); > if (priv->origin_uri) >@@ -105,6 +107,8 @@ > { > SoupConnection *conn = SOUP_CONNECTION (object); > >+ printf ("@@@ disposing connection %p\n", object); >+ > clear_current_request (conn); > soup_connection_disconnect (conn); > >@@ -354,15 +358,21 @@ > { > SoupConnectionPrivate *priv = SOUP_CONNECTION_GET_PRIVATE (conn); > >+ printf ("@@@ clear_current_request(%p) [was %p]\n", conn, priv->cur_req); >+ > if (priv->cur_req) { >- if (!soup_message_is_keepalive (priv->cur_req)) >- soup_connection_disconnect (conn); >- else >- priv->last_used = time (NULL); >+ SoupMessage *cur_req = priv->cur_req; > > g_object_remove_weak_pointer (G_OBJECT (priv->cur_req), > (gpointer *)&priv->cur_req); > priv->cur_req = NULL; >+ >+ if (!soup_message_is_keepalive (cur_req)) >+ soup_connection_disconnect (conn); >+ else { >+ priv->last_used = time (NULL); >+ soup_message_io_stop (cur_req); >+ } > } > priv->in_use = FALSE; > } >@@ -606,6 +616,8 @@ > { > SoupConnectionPrivate *priv; > >+ printf ("@@@ soup_connection_disconnect(%p)\n", conn); >+ > g_return_if_fail (SOUP_IS_CONNECTION (conn)); > priv = SOUP_CONNECTION_GET_PRIVATE (conn); > >@@ -706,6 +718,8 @@ > { > SoupConnectionPrivate *priv = SOUP_CONNECTION_GET_PRIVATE (conn); > >+ printf ("@@@ send_request(conn %p, msg %p). cur_req was %p\n", >+ conn, req, priv->cur_req); > if (req != priv->cur_req) { > set_current_request (priv, req); > if (priv->filter) >@@ -748,6 +762,7 @@ > { > g_return_if_fail (SOUP_IS_CONNECTION (conn)); > >+ printf ("@@@ soup_connection_reserve (%p)\n", conn); > SOUP_CONNECTION_GET_PRIVATE (conn)->in_use = TRUE; > } > >@@ -764,6 +779,7 @@ > { > g_return_if_fail (SOUP_IS_CONNECTION (conn)); > >+ printf ("@@@ soup_connection_release (%p)\n", conn); > clear_current_request (conn); > } > >Index: libsoup/soup-message-io.c >=================================================================== >RCS file: /cvs/gnome/libsoup/libsoup/soup-message-io.c,v >retrieving revision 1.20 >diff -u -r1.20 soup-message-io.c >--- libsoup/soup-message-io.c 16 Aug 2005 14:33:42 -0000 1.20 >+++ libsoup/soup-message-io.c 20 Oct 2005 14:34:32 -0000 >@@ -128,8 +128,12 @@ > > if (io->read_state != SOUP_MESSAGE_IO_STATE_DONE) > soup_socket_disconnect (io->sock); >- else if (io->conn) >- soup_connection_release (io->conn); >+ else if (io->conn) { >+ SoupConnection *conn = io->conn; >+ io->conn = NULL; >+ soup_connection_release (conn); >+ g_object_unref (conn); >+ } > } > > #define SOUP_MESSAGE_IO_EOL "\r\n" >Index: libsoup/soup-session.c >=================================================================== >RCS file: /cvs/gnome/libsoup/libsoup/soup-session.c,v >retrieving revision 1.26 >diff -u -r1.26 soup-session.c >--- libsoup/soup-session.c 15 Jul 2005 17:53:10 -0000 1.26 >+++ libsoup/soup-session.c 20 Oct 2005 14:34:32 -0000 >@@ -961,10 +961,12 @@ > g_object_ref (oldest); > g_mutex_unlock (priv->host_lock); > soup_connection_disconnect (oldest); >+ printf ("@@@ soup_session_try_prune_connection(%p) pruned %p\n", session, oldest); > g_object_unref (oldest); > return TRUE; > } else { > g_mutex_unlock (priv->host_lock); >+ printf ("@@@ soup_session_try_prune_connection(%p) failed\n", session); > return FALSE; > } > } >@@ -1101,16 +1103,22 @@ > g_mutex_lock (priv->host_lock); > > host = get_host_for_message (session, msg); >+ printf ("@@@ soup_session_get_connection(%p, %p [%s:%d])\n", >+ session, msg, host->root_uri->host, host->root_uri->port); >+ > for (conns = host->connections; conns; conns = conns->next) { > if (!soup_connection_is_in_use (conns->data)) { >+ printf ("@@@ reserving connection %p\n", conns->data); > soup_connection_reserve (conns->data); > g_mutex_unlock (priv->host_lock); > *is_new = FALSE; > return conns->data; >- } >+ } else >+ printf ("@@@ connection %p is busy\n", conns->data); > } > > if (msg->status == SOUP_MESSAGE_STATUS_CONNECTING) { >+ printf ("@@@ No connection available, but msg status is CONNECTING\n"); > /* We already started a connection for this > * message, so don't start another one. > */ >@@ -1119,11 +1127,13 @@ > } > > if (host->num_conns >= priv->max_conns_per_host) { >+ printf ("@@@ No connection available and can't open new connection to host\n"); > g_mutex_unlock (priv->host_lock); > return NULL; > } > > if (priv->num_conns >= priv->max_conns) { >+ printf ("@@@ No connection available and can't open new connection\n"); > *try_pruning = TRUE; > g_mutex_unlock (priv->host_lock); > return NULL; >@@ -1157,6 +1167,7 @@ > session); > > g_hash_table_insert (priv->conns, conn, host); >+ printf ("@@@ Created new connection %p\n", conn); > > /* We increment the connection counts so it counts against the > * totals, but we don't add it to the host's connection list >@@ -1183,6 +1194,7 @@ > if (!SOUP_MESSAGE_IS_STARTING (msg)) { > soup_message_queue_remove_message (session->queue, msg); > g_signal_handlers_disconnect_by_func (msg, message_finished, session); >+ printf ("@@@ message_finished(%p)\n", msg); > } > } > >@@ -1227,6 +1239,7 @@ > g_return_if_fail (SOUP_IS_SESSION (session)); > g_return_if_fail (SOUP_IS_MESSAGE (msg)); > >+ printf ("@@@ soup_session_queue_message(%p, %p)\n", session, msg); > SOUP_SESSION_GET_CLASS (session)->queue_message (session, msg, > callback, user_data); > } >@@ -1251,6 +1264,7 @@ > g_return_if_fail (SOUP_IS_SESSION (session)); > g_return_if_fail (SOUP_IS_MESSAGE (msg)); > >+ printf ("@@@ soup_session_REqueue_message(%p, %p)\n", session, msg); > SOUP_SESSION_GET_CLASS (session)->requeue_message (session, msg); > } > >@@ -1274,6 +1288,7 @@ > g_return_val_if_fail (SOUP_IS_SESSION (session), SOUP_STATUS_MALFORMED); > g_return_val_if_fail (SOUP_IS_MESSAGE (msg), SOUP_STATUS_MALFORMED); > >+ printf ("@@@ soup_session_send_message(%p, %p)\n", session, msg); > return SOUP_SESSION_GET_CLASS (session)->send_message (session, msg); > } > >@@ -1300,6 +1315,7 @@ > g_return_if_fail (SOUP_IS_SESSION (session)); > g_return_if_fail (SOUP_IS_MESSAGE (msg)); > >+ printf ("@@@ soup_session_cancel_message(%p, %p)\n", session, msg); > SOUP_SESSION_GET_CLASS (session)->cancel_message (session, msg); > } >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
Actions:
View
|
Diff
Attachments on
bug 116762
:
49768
|
49769
|
49770
|
51042
|
51279
| 54960