mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-04-21 10:00:41 +02:00
2003-01-24 Havoc Pennington <hp@pobox.com>
* dbus/dbus-list.c (alloc_link): put a thread lock on the global list_pool * bus/driver.c (bus_driver_handle_list_services): fix a leak on OOM
This commit is contained in:
parent
a284b80714
commit
a1a53c3242
3 changed files with 36 additions and 5 deletions
|
|
@ -1,3 +1,11 @@
|
|||
2003-01-24 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* dbus/dbus-list.c (alloc_link): put a thread lock on the global
|
||||
list_pool
|
||||
|
||||
* bus/driver.c (bus_driver_handle_list_services): fix a leak
|
||||
on OOM
|
||||
|
||||
2003-01-25 Anders Carlsson <andersca@codefactory.se>
|
||||
|
||||
* dbus/dbus-list.c: (alloc_link), (free_link):
|
||||
|
|
|
|||
11
bus/driver.c
11
bus/driver.c
|
|
@ -248,7 +248,7 @@ bus_driver_handle_list_services (DBusConnection *connection,
|
|||
services = bus_services_list (&len);
|
||||
|
||||
if (!services)
|
||||
return;
|
||||
goto error;
|
||||
|
||||
if (!dbus_message_append_fields (reply,
|
||||
DBUS_TYPE_STRING_ARRAY, services, len,
|
||||
|
|
@ -260,9 +260,12 @@ bus_driver_handle_list_services (DBusConnection *connection,
|
|||
|
||||
error:
|
||||
dbus_message_unref (reply);
|
||||
for (i = 0; i < len; i++)
|
||||
dbus_free (services[i]);
|
||||
dbus_free (services);
|
||||
if (services != NULL)
|
||||
{
|
||||
for (i = 0; i < len; i++)
|
||||
dbus_free (services[i]);
|
||||
dbus_free (services);
|
||||
}
|
||||
}
|
||||
|
||||
/* This is where all the magic occurs */
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
#include "dbus-internals.h"
|
||||
#include "dbus-list.h"
|
||||
#include "dbus-mempool.h"
|
||||
#include "dbus-threads.h"
|
||||
|
||||
/**
|
||||
* @defgroup DBusList Linked list
|
||||
|
|
@ -34,6 +35,7 @@
|
|||
*/
|
||||
|
||||
static DBusMemPool *list_pool;
|
||||
static DBusStaticMutex list_pool_lock = DBUS_STATIC_MUTEX_INIT;
|
||||
|
||||
/**
|
||||
* @defgroup DBusListInternals Linked list implementation details
|
||||
|
|
@ -45,16 +47,32 @@ static DBusMemPool *list_pool;
|
|||
* @{
|
||||
*/
|
||||
|
||||
/* the mem pool is probably a speed hit, with the thread
|
||||
* lock, though it does still save memory - unknown.
|
||||
*/
|
||||
static DBusList*
|
||||
alloc_link (void *data)
|
||||
{
|
||||
DBusList *link;
|
||||
|
||||
if (!dbus_static_mutex_lock (&list_pool_lock))
|
||||
return NULL;
|
||||
|
||||
if (!list_pool)
|
||||
list_pool = _dbus_mem_pool_new (sizeof (DBusList), TRUE);
|
||||
{
|
||||
list_pool = _dbus_mem_pool_new (sizeof (DBusList), TRUE);
|
||||
|
||||
if (list_pool == NULL)
|
||||
{
|
||||
dbus_static_mutex_unlock (&list_pool_lock);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
link = _dbus_mem_pool_alloc (list_pool);
|
||||
link->data = data;
|
||||
|
||||
dbus_static_mutex_unlock (&list_pool_lock);
|
||||
|
||||
return link;
|
||||
}
|
||||
|
|
@ -62,7 +80,9 @@ alloc_link (void *data)
|
|||
static void
|
||||
free_link (DBusList *link)
|
||||
{
|
||||
dbus_static_mutex_lock (&list_pool_lock);
|
||||
_dbus_mem_pool_dealloc (list_pool, link);
|
||||
dbus_static_mutex_unlock (&list_pool_lock);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue