summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Walter <stefw@src.gnome.org>2008-02-21 23:07:37 +0000
committerStefan Walter <stefw@src.gnome.org>2008-02-21 23:07:37 +0000
commitffa3565e734d8d1343778495d60c66a930f00ab5 (patch)
tree90e3671752e215bb5949f070de1ac5952e14431a
parenta667fede35d3f39ee80382036bf3855ecbe6371c (diff)
downloadgnome-keyring-ffa3565e734d8d1343778495d60c66a930f00ab5.tar.gz
Shutdown socket connections properly. This may fix the hang problems
* daemon/gkr-daemon-io.c: * library/gnome-keyring.c: Shutdown socket connections properly. This may fix the hang problems described in bug #503278 svn path=/trunk/; revision=1088
-rw-r--r--ChangeLog6
-rw-r--r--daemon/gkr-daemon-io.c1
-rw-r--r--library/gnome-keyring.c6
3 files changed, 12 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 36629ee6..30f3899b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-02-21 Stef Walter <stef@memberwebs.com>
+
+ * daemon/gkr-daemon-io.c:
+ * library/gnome-keyring.c: Shutdown socket connections properly.
+ This may fix the hang problems described in bug #503278
+
2008-02-14 Stef Walter <stef@memberwebs.com>
* library/gnome-keyring-proto.c: Build fix due to glib
diff --git a/daemon/gkr-daemon-io.c b/daemon/gkr-daemon-io.c
index eadba83b..07162082 100644
--- a/daemon/gkr-daemon-io.c
+++ b/daemon/gkr-daemon-io.c
@@ -346,6 +346,7 @@ client_worker_done (GkrAsyncWorker *worker, gpointer result, gpointer user_data)
gnome_keyring_application_ref_free (client->app_ref);
}
+ shutdown (client->sock, SHUT_RDWR);
close (client->sock);
g_free (client);
}
diff --git a/library/gnome-keyring.c b/library/gnome-keyring.c
index 985ecbea..78c86211 100644
--- a/library/gnome-keyring.c
+++ b/library/gnome-keyring.c
@@ -252,6 +252,8 @@ operation_free (GnomeKeyringOperation *op)
(*op->destroy_reply_data) (op->reply_data);
gkr_buffer_uninit (&op->send_buffer);
gkr_buffer_uninit (&op->receive_buffer);
+
+ shutdown (op->socket, SHUT_RDWR);
close (op->socket);
g_free (op);
}
@@ -520,8 +522,10 @@ start_operation (GnomeKeyringOperation *op)
g_source_remove (op->io_watch);
op->io_watch = 0;
}
- if (op->socket >= 0)
+ if (op->socket >= 0) {
+ shutdown (op->socket, SHUT_RDWR);
close (op->socket);
+ }
op->socket = connect_to_daemon (TRUE);
if (op->socket < 0) {