Merge "Optional autogen.sh flag --enable-kdbus-transport added allowing to compile...
[platform/upstream/dbus.git] / dbus / dbus-server-socket.c
index dbd7213..ae4b602 100644 (file)
@@ -89,10 +89,8 @@ handle_new_client_fd_and_unlock (DBusServer *server,
   DBusConnection *connection;
   DBusTransport *transport;
   DBusNewConnectionFunction new_connection_function;
-  DBusServerSocket* socket_server;
   void *new_connection_data;
 
-  socket_server = (DBusServerSocket*)server;
   _dbus_verbose ("Creating new client connection with fd %d\n", client_fd);
 
   HAVE_LOCK_CHECK (server);
@@ -236,6 +234,7 @@ socket_disconnect (DBusServer *server)
         {
           _dbus_server_remove_watch (server,
                                      socket_server->watch[i]);
+          _dbus_watch_invalidate (socket_server->watch[i]);
           _dbus_watch_unref (socket_server->watch[i]);
           socket_server->watch[i] = NULL;
         }
@@ -251,6 +250,9 @@ socket_disconnect (DBusServer *server)
       _dbus_delete_file (&tmp, NULL);
     }
 
+  if (server->published_address)
+      _dbus_daemon_unpublish_session_bus_address();
+
   HAVE_LOCK_CHECK (server);
 }
 
@@ -270,7 +272,7 @@ static const DBusServerVTable socket_vtable = {
  * @param fds list of file descriptors.
  * @param n_fds number of file descriptors
  * @param address the server's address
- * @param use_nonce whether to create and use a nonce for authentication
+ * @param noncefile to be used for authentication (NULL if not needed)
  * @returns the new server, or #NULL if no memory.
  *
  */
@@ -341,14 +343,9 @@ _dbus_server_new_for_socket (int              *fds,
 
   SERVER_UNLOCK (server);
 
+  _dbus_server_trace_ref (&socket_server->base, 0, 1, "new_for_socket");
   return (DBusServer*) socket_server;
 
- failed_3:
-  if (socket_server->noncefile)
-    {
-      _dbus_noncefile_delete (socket_server->noncefile, NULL);
-      dbus_free (socket_server->noncefile );
-    }
  failed_2:
   for (i = 0 ; i < n_fds ; i++)
     {
@@ -461,16 +458,18 @@ _dbus_server_new_for_tcp_socket (const char     *host,
       noncefile = dbus_new0 (DBusNonceFile, 1);
       if (noncefile == NULL)
         {
+          dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
           goto failed_2;
         }
 
-      if (!_dbus_noncefile_create (noncefile, NULL))
-          goto failed_2;
+      if (!_dbus_noncefile_create (noncefile, error))
+          goto failed_3;
 
       if (!_dbus_string_append (&address, ",noncefile=") ||
           !_dbus_address_append_escaped (&address, _dbus_noncefile_get_path (noncefile)))
         {
-          goto failed_2;
+          dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
+          goto failed_4;
         }
 
     }
@@ -479,7 +478,7 @@ _dbus_server_new_for_tcp_socket (const char     *host,
   if (server == NULL)
     {
       dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-      goto failed_2;
+      goto failed_4;
     }
 
   _dbus_string_free (&port_str);
@@ -488,6 +487,12 @@ _dbus_server_new_for_tcp_socket (const char     *host,
 
   return server;
 
+ failed_4:
+  _dbus_noncefile_delete (noncefile, NULL);
+
+ failed_3:
+  dbus_free (noncefile);
+
  failed_2:
   for (i = 0 ; i < nlisten_fds ; i++)
     _dbus_close_socket (listen_fds[i], NULL);