[PATCH 2/4] Remove socket file at exit.

Yao Qi
2012-06-09T12:47:18Z

This patch is to add code to call 'unlink' to make sure agent can remove socket
when inferior (after detached from GDB/GDBserver) exits. It fixes the fail
below:

FAIL: gdb.trace/strace.exp: remove_socket_after_detach: socket file removed

gdb/gdbserver:

2012-06-09 Yao Qi <yao@codesourcery.com>

PR gdb/14161.
* tracepoint.c (gdb_agent_socket_init): Removed.
(gdb_agent_remove_socket): New.
(gdb_agent_helper_thread): Call gdb_agent_remove_socket at
exit.
Inline gdb_agent_socket_init here.
---
gdb/gdbserver/tracepoint.c | 56 +++++++++++++++++++++----------------------
1 files changed, 27 insertions(+), 29 deletions(-)

diff --git a/gdb/gdbserver/tracepoint.c b/gdb/gdbserver/tracepoint.c
index f103dfc..4e6c3ec 100644
--- a/gdb/gdbserver/tracepoint.c
+++ b/gdb/gdbserver/tracepoint.c
@@ -6748,29 +6748,6 @@ init_named_socket (const char *name)
return fd;
}

-static int
-gdb_agent_socket_init (void)
-{
- int result, fd;
- char name[UNIX_PATH_MAX];
-
- result = xsnprintf (name, UNIX_PATH_MAX, "%s/gdb_ust%d",
- SOCK_DIR, getpid ());
- if (result >= UNIX_PATH_MAX)
- {
- trace_debug ("string overflow allocating socket name");
- return -1;
- }
-
- fd = init_named_socket (name);
- if (fd < 0)
- warning ("Error initializing named socket (%s) for communication with the "
- "ust helper thread. Check that directory exists and that it "
- "is writable.", name);
-
- return fd;
-}
-
#ifdef HAVE_UST

/* The next marker to be returned on a qTsSTM command. */
@@ -6995,27 +6972,48 @@ gdb_ust_init (void)
#endif /* HAVE_UST */

#include <sys/syscall.h>
+#include <stdlib.h>
+
+static char agent_socket_name[UNIX_PATH_MAX];
+
+static void
+gdb_agent_remove_socket (void)
+{
+ unlink (agent_socket_name);
+}

/* Helper thread of agent. */

static void *
gdb_agent_helper_thread (void *arg)
{
- int listen_fd;
+ atexit (gdb_agent_remove_socket);

while (1)
{
- listen_fd = gdb_agent_socket_init ();
+ int listen_fd, result;

- if (helper_thread_id == 0)
- helper_thread_id = syscall (SYS_gettid);
+ result = xsnprintf (agent_socket_name, UNIX_PATH_MAX, "%s/gdb_ust%d",
+ SOCK_DIR, getpid ());
+ if (result >= UNIX_PATH_MAX)
+ {
+ trace_debug ("string overflow allocating socket name");
+ break;
+ }

- if (listen_fd == -1)
+ listen_fd = init_named_socket (agent_socket_name);
+ if (listen_fd < 0)
{
- warning ("could not create sync socket\n");
+ warning ("Error initializing named socket (%s) for communication "
+ "with the ust helper thread. Check that directory exists"
+ " and that it is writable.", agent_socket_name);
break;
+
}

+ if (helper_thread_id == 0)
+ helper_thread_id = syscall (SYS_gettid);
+
while (1)
{
socklen_t tmp;
--
1.7.0.4