This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


On 06/09/2012 01:46 PM, Yao Qi wrote:

> 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
> 


(Just as reminder, ideally, at check in time, the patches would be sequenced
to not introduce any FAILs along the way.)

> gdb/gdbserver:
> 
> 2012-06-09  Yao Qi  <yao@codesourcery.com>
> 
> 	PR gdb/14161.
> 	* tracepoint.c (gdb_agent_socket_init): Removed.


"Remove".

> 	(gdb_agent_remove_socket): New.
> 	(gdb_agent_helper_thread): Call gdb_agent_remove_socket at
> 	exit.
> 	Inline gdb_agent_socket_init here.


But why inline?  We should just need to move the "name" local
of gdb_agent_socket_init a global?  (btw, the 'agent_socket_name'
global is missing from the ChangeLog.)

> ---
>  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;



-- 
Pedro Alves


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]