xserver: Branch 'server-1.4-branch' - 5 commits
Daniel Stone
daniels at kemper.freedesktop.org
Fri Dec 28 05:51:30 PST 2007
config/dbus-core.c | 5 ++++-
config/hal.c | 11 ++++++++++-
dix/devices.c | 3 ++-
hw/kdrive/ephyr/ephyr.c | 1 +
os/connection.c | 3 ++-
5 files changed, 19 insertions(+), 4 deletions(-)
New commits:
commit 102c012c206cbb3bbf0fa5b0c8f0ce2ce9bba72a
Author: Daniel Stone <daniel at fooishbar.org>
Date: Fri Dec 28 15:49:50 2007 +0200
Input: Don't reinit devices
If a device is already initialised (i.e. the virtual core devices) during
IASD, don't init them again. This fixes a leak.
(cherry picked from commit 1f6015c8fe62c28cfaa82cc855b5b9c28fd34607)
diff --git a/dix/devices.c b/dix/devices.c
index 287d730..f6f3c8e 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -473,7 +473,8 @@ InitAndStartDevices(void)
for (dev = inputInfo.off_devices; dev; dev = dev->next) {
DebugF("(dix) initialising device %d\n", dev->id);
- ActivateDevice(dev);
+ if (!dev->inited)
+ ActivateDevice(dev);
}
for (dev = inputInfo.off_devices; dev; dev = next)
{
commit a304fc1d4a7062f65161ef8748fd358639ec73de
Author: Daniel Stone <daniel at fooishbar.org>
Date: Fri Dec 28 15:48:57 2007 +0200
KDrive: Xephyr: Don't leak screen damage structure
(cherry picked from commit 0b03d97a244540824c922c300adbc3d3ae4855d5)
diff --git a/hw/kdrive/ephyr/ephyr.c b/hw/kdrive/ephyr/ephyr.c
index e8001df..27165a5 100644
--- a/hw/kdrive/ephyr/ephyr.c
+++ b/hw/kdrive/ephyr/ephyr.c
@@ -394,6 +394,7 @@ ephyrUnsetInternalDamage (ScreenPtr pScreen)
pPixmap = (*pScreen->GetScreenPixmap) (pScreen);
DamageUnregister (&pPixmap->drawable, scrpriv->pDamage);
+ DamageDestroy (scrpriv->pDamage);
RemoveBlockAndWakeupHandlers (ephyrInternalDamageBlockHandler,
ephyrInternalDamageWakeupHandler,
commit 38d8cfaaff0ae6273d9e921aae08b2706355f0d2
Author: Daniel Stone <daniel at fooishbar.org>
Date: Fri Dec 28 15:48:25 2007 +0200
OS: Don't leak connection translation table on regeneration
(cherry picked from commit e868e0bc0d2318e62707d3ae68532b0029959154)
diff --git a/os/connection.c b/os/connection.c
index b944593..d1ba845 100644
--- a/os/connection.c
+++ b/os/connection.c
@@ -353,7 +353,8 @@ InitConnectionLimits(void)
#endif
#if !defined(WIN32)
- ConnectionTranslation = (int *)xnfalloc(sizeof(int)*(lastfdesc + 1));
+ if (!ConnectionTranslation)
+ ConnectionTranslation = (int *)xnfalloc(sizeof(int)*(lastfdesc + 1));
#else
InitConnectionTranslation();
#endif
commit 30fc8053a5e734c3b70156bdae94fd7d5d7865a5
Author: Daniel Stone <daniel at fooishbar.org>
Date: Fri Dec 28 15:47:57 2007 +0200
Config: HAL: Don't leak options on failure to add device
This showed up in Xephyr in particular, which denies new device requests.
(cherry picked from commit 2bb199056edf6c63cf978d1a8ad49a57ce1938f3)
diff --git a/config/hal.c b/config/hal.c
index 4427deb..16f16ec 100644
--- a/config/hal.c
+++ b/config/hal.c
@@ -92,6 +92,8 @@ add_option(InputOption **options, const char *key, const char *value)
for (; *options; options = &(*options)->next)
;
*options = xcalloc(sizeof(**options), 1);
+ if (!*options) /* Yeesh. */
+ return;
(*options)->key = xstrdup(key);
(*options)->value = xstrdup(value);
(*options)->next = NULL;
@@ -156,7 +158,7 @@ device_added(LibHalContext *hal_ctx, const char *udi)
char *path = NULL, *driver = NULL, *name = NULL, *xkb_rules = NULL;
char *xkb_model = NULL, *xkb_layout = NULL, *xkb_variant = NULL;
char *xkb_options = NULL, *config_info = NULL;
- InputOption *options = NULL;
+ InputOption *options = NULL, *tmpo = NULL;
DeviceIntPtr dev;
DBusError error;
int type = TYPE_NONE;
@@ -232,6 +234,7 @@ device_added(LibHalContext *hal_ctx, const char *udi)
if (NewInputDeviceRequest(options, &dev) != Success) {
DebugF("[config/hal] NewInputDeviceRequest failed\n");
+ dev = NULL;
goto unwind;
}
@@ -255,6 +258,12 @@ unwind:
xfree(xkb_options);
if (config_info)
xfree(config_info);
+ while (!dev && (tmpo = options)) {
+ options = tmpo->next;
+ xfree(tmpo->key);
+ xfree(tmpo->value);
+ xfree(tmpo);
+ }
out_error:
dbus_error_free(&error);
commit 81c5950d0af8d5859f850b98c98a532784e9a757
Author: Daniel Stone <daniel at fooishbar.org>
Date: Fri Dec 28 15:47:21 2007 +0200
Config: D-Bus: Don't leak timers
TimerCancel doesn't free the timer: you need TimerFree for that.
(cherry picked from commit 25deaa7e6b29b3913b35efa39b9c8b25de5e6d95)
diff --git a/config/dbus-core.c b/config/dbus-core.c
index eab72a5..9cf1530 100644
--- a/config/dbus-core.c
+++ b/config/dbus-core.c
@@ -76,7 +76,7 @@ teardown(void)
struct config_dbus_core_hook *hook;
if (bus_info.timer) {
- TimerCancel(bus_info.timer);
+ TimerFree(bus_info.timer);
bus_info.timer = NULL;
}
@@ -116,6 +116,8 @@ message_filter(DBusConnection *connection, DBusMessage *message, void *data)
bus_info.connection = NULL;
teardown();
+ if (bus_info.timer)
+ TimerFree(bus_info.timer);
bus_info.timer = TimerSet(NULL, 0, 1, reconnect_timer, NULL);
return DBUS_HANDLER_RESULT_HANDLED;
@@ -186,6 +188,7 @@ static CARD32
reconnect_timer(OsTimerPtr timer, CARD32 time, pointer arg)
{
if (connect_to_bus()) {
+ TimerFree(bus_info.timer);
bus_info.timer = NULL;
return 0;
}
More information about the xorg-commit
mailing list