[vlc-commits] cli: register commands before clients

Rémi Denis-Courmont git at videolan.org
Sun Nov 29 14:56:06 CET 2020


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sun Nov 29 13:13:02 2020 +0200| [6daa9c487b98b3ee154cb0da5f384ee5cf0d6e23] | committer: Rémi Denis-Courmont

cli: register commands before clients

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=6daa9c487b98b3ee154cb0da5f384ee5cf0d6e23
---

 modules/control/cli/cli.c | 63 ++++++++++++++++++++++-------------------------
 1 file changed, 29 insertions(+), 34 deletions(-)

diff --git a/modules/control/cli/cli.c b/modules/control/cli/cli.c
index 0ce26c1a57..cc751495dd 100644
--- a/modules/control/cli/cli.c
+++ b/modules/control/cli/cli.c
@@ -777,20 +777,38 @@ static int Activate( vlc_object_t *p_this )
 {
     intf_thread_t *p_intf = (intf_thread_t*)p_this;
     struct cli_client *cl;
-    char *psz_host, *psz_unix_path = NULL;
+    char *psz_host;
     int  *pi_socket = NULL;
 
+    intf_sys_t *p_sys = vlc_obj_malloc(p_this, sizeof (*p_sys));
+    if (unlikely(p_sys == NULL))
+        return VLC_ENOMEM;
+
+    p_intf->p_sys = p_sys;
+    p_sys->commands = NULL;
+#ifndef _WIN32
+    vlc_mutex_init(&p_sys->clients_lock);
+    vlc_list_init(&p_sys->clients);
+#endif
+    RegisterHandlers(p_intf, cmds, ARRAY_SIZE(cmds), p_intf);
+
+    p_sys->player_cli = RegisterPlayer(p_intf);
+    if (unlikely(p_sys->player_cli == NULL))
+        goto error;
+
+    RegisterPlaylist(p_intf);
+
 #ifndef _WIN32
 #if defined(HAVE_ISATTY)
     /* Check that stdin is a TTY */
     if( !var_InheritBool( p_intf, "rc-fake-tty" ) && !isatty( 0 ) )
     {
         msg_Warn( p_intf, "fd 0 is not a TTY" );
-        return VLC_EGENERIC;
+        goto error;
     }
 #endif
 #ifdef AF_LOCAL
-    psz_unix_path = var_InheritString( p_intf, "rc-unix" );
+    char *psz_unix_path = var_InheritString(p_intf, "rc-unix");
     if( psz_unix_path )
     {
         int i_socket;
@@ -805,14 +823,13 @@ static int Activate( vlc_object_t *p_this )
         if ( strlen(psz_unix_path) + 1 >= sizeof( addr.sun_path ) )
         {
             msg_Err( p_intf, "rc-unix value is longer than expected" );
-            return VLC_EGENERIC;
+            goto error;
         }
 
         if( (i_socket = vlc_socket( PF_LOCAL, SOCK_STREAM, 0, false ) ) < 0 )
         {
             msg_Warn( p_intf, "can't open socket: %s", vlc_strerror_c(errno) );
-            free( psz_unix_path );
-            return VLC_EGENERIC;
+            goto error;
         }
 
         addr.sun_family = AF_LOCAL;
@@ -831,9 +848,8 @@ static int Activate( vlc_object_t *p_this )
             {
                 msg_Err (p_intf, "cannot bind UNIX socket at %s: %s",
                          psz_unix_path, vlc_strerror_c(errno));
-                free (psz_unix_path);
                 net_Close (i_socket);
-                return VLC_EGENERIC;
+                goto error;
             }
         }
 
@@ -841,9 +857,8 @@ static int Activate( vlc_object_t *p_this )
         {
             msg_Warn (p_intf, "can't listen on socket: %s",
                       vlc_strerror_c(errno));
-            free( psz_unix_path );
             net_Close( i_socket );
-            return VLC_EGENERIC;
+            goto error;
         }
 
         /* FIXME: we need a core function to merge listening sockets sets */
@@ -852,10 +867,11 @@ static int Activate( vlc_object_t *p_this )
         {
             free( psz_unix_path );
             net_Close( i_socket );
-            return VLC_ENOMEM;
+            goto error;
         }
         pi_socket[0] = i_socket;
         pi_socket[1] = -1;
+        p_sys->psz_unix_path = psz_unix_path;
     }
 #endif /* AF_LOCAL */
 #endif /* !_WIN32 */
@@ -873,7 +889,7 @@ static int Activate( vlc_object_t *p_this )
             if( asprintf( &psz_backward_compat_host, "//%s", psz_host ) < 0 )
             {
                 free( psz_host );
-                return VLC_EGENERIC;
+                goto error;
             }
             free( psz_host );
             psz_host = psz_backward_compat_host;
@@ -889,34 +905,19 @@ static int Activate( vlc_object_t *p_this )
                       url.psz_host, url.i_port );
             vlc_UrlClean( &url );
             free( psz_host );
-            return VLC_EGENERIC;
+            goto error;
         }
 
         vlc_UrlClean( &url );
         free( psz_host );
     }
 
-    intf_sys_t *p_sys = vlc_obj_malloc(p_this, sizeof (*p_sys));
-    if( unlikely(p_sys == NULL) )
-    {
-        net_ListenClose( pi_socket );
-        free( psz_unix_path );
-        return VLC_ENOMEM;
-    }
-
-    p_intf->p_sys = p_sys;
-    p_sys->commands = NULL;
     p_sys->pi_socket_listen = pi_socket;
 
-    RegisterHandlers(p_intf, cmds, ARRAY_SIZE(cmds), p_intf);
-
     /* Line-buffered stdout */
     setvbuf( stdout, (char *)NULL, _IOLBF, 0 );
 
 #ifndef _WIN32
-    vlc_mutex_init(&p_sys->clients_lock);
-    vlc_list_init(&p_sys->clients);
-    p_sys->psz_unix_path = psz_unix_path;
 #else
     p_sys->i_socket = -1;
 #if VLC_WINSTORE_APP
@@ -928,12 +929,6 @@ static int Activate( vlc_object_t *p_this )
 #endif
 #endif
 
-    p_sys->player_cli = RegisterPlayer(p_intf);
-    if (unlikely(p_sys->player_cli == NULL))
-        goto error;
-
-    RegisterPlaylist(p_intf);
-
 #ifndef _WIN32
     if (pi_socket == NULL)
     {



More information about the vlc-commits mailing list