Contents of /trunk/hal/patches/hal-0.5.10-use-g_slice-for-hotplug-events.patch
Parent Directory | Revision Log
Revision 597 -
(show annotations)
(download)
Mon May 19 19:05:19 2008 UTC (16 years, 4 months ago) by niro
File size: 14498 byte(s)
Mon May 19 19:05:19 2008 UTC (16 years, 4 months ago) by niro
File size: 14498 byte(s)
-gentoo patches
1 | From cd5de1b7be2bc761fd4319321a6985da20124b89 Mon Sep 17 00:00:00 2001 |
2 | From: Rob Taylor <rob.taylor@codethink.co.uk> |
3 | Date: Mon, 19 Nov 2007 16:17:27 +0000 |
4 | Subject: [PATCH] use g_slice for hotplug events |
5 | |
6 | Using g_slice should be better (and makes for cleaner code) than our current |
7 | HotplugEvent pool. |
8 | --- |
9 | hald/linux/acpi.c | 8 +++--- |
10 | hald/linux/apm.c | 8 +++--- |
11 | hald/linux/blockdev.c | 12 ++++++---- |
12 | hald/linux/coldplug.c | 52 +++++++++++------------------------------------- |
13 | hald/linux/device.c | 6 ++-- |
14 | hald/linux/hotplug.c | 6 +---- |
15 | hald/linux/hotplug.h | 3 -- |
16 | hald/linux/osspec.c | 4 +- |
17 | 8 files changed, 33 insertions(+), 66 deletions(-) |
18 | |
19 | diff --git a/hald/linux/acpi.c b/hald/linux/acpi.c |
20 | index cc97f15..e995d70 100644 |
21 | --- a/hald/linux/acpi.c |
22 | +++ b/hald/linux/acpi.c |
23 | @@ -727,7 +727,7 @@ acpi_synthesize_item (const gchar *fullpath, int acpi_type) |
24 | { |
25 | HotplugEvent *hotplug_event; |
26 | HAL_INFO (("Processing %s", fullpath)); |
27 | - hotplug_event = g_new0 (HotplugEvent, 1); |
28 | + hotplug_event = g_slice_new0 (HotplugEvent); |
29 | hotplug_event->action = HOTPLUG_ACTION_ADD; |
30 | hotplug_event->type = HOTPLUG_EVENT_ACPI; |
31 | g_strlcpy (hotplug_event->acpi.acpi_path, fullpath, sizeof (hotplug_event->acpi.acpi_path)); |
32 | @@ -855,7 +855,7 @@ acpi_synthesize_sonypi_display (void) |
33 | if (!found) |
34 | return; |
35 | |
36 | - hotplug_event = g_new0 (HotplugEvent, 1); |
37 | + hotplug_event = g_slice_new0 (HotplugEvent); |
38 | hotplug_event->action = HOTPLUG_ACTION_ADD; |
39 | hotplug_event->type = HOTPLUG_EVENT_ACPI; |
40 | g_strlcpy (hotplug_event->acpi.acpi_path, path, sizeof (hotplug_event->acpi.acpi_path)); |
41 | @@ -1253,7 +1253,7 @@ acpi_generate_add_hotplug_event (HalDevice *d) |
42 | acpi_path = hal_device_property_get_string (d, "linux.acpi_path"); |
43 | acpi_type = hal_device_property_get_int (d, "linux.acpi_type"); |
44 | |
45 | - hotplug_event = g_new0 (HotplugEvent, 1); |
46 | + hotplug_event = g_slice_new0 (HotplugEvent); |
47 | hotplug_event->action = HOTPLUG_ACTION_ADD; |
48 | hotplug_event->type = HOTPLUG_EVENT_ACPI; |
49 | g_strlcpy (hotplug_event->acpi.acpi_path, acpi_path, sizeof (hotplug_event->acpi.acpi_path)); |
50 | @@ -1271,7 +1271,7 @@ acpi_generate_remove_hotplug_event (HalDevice *d) |
51 | acpi_path = hal_device_property_get_string (d, "linux.acpi_path"); |
52 | acpi_type = hal_device_property_get_int (d, "linux.acpi_type"); |
53 | |
54 | - hotplug_event = g_new0 (HotplugEvent, 1); |
55 | + hotplug_event = g_slice_new0 (HotplugEvent); |
56 | hotplug_event->action = HOTPLUG_ACTION_REMOVE; |
57 | hotplug_event->type = HOTPLUG_EVENT_ACPI; |
58 | g_strlcpy (hotplug_event->acpi.acpi_path, acpi_path, sizeof (hotplug_event->acpi.acpi_path)); |
59 | diff --git a/hald/linux/apm.c b/hald/linux/apm.c |
60 | index 79c54ad..5993e43 100644 |
61 | --- a/hald/linux/apm.c |
62 | +++ b/hald/linux/apm.c |
63 | @@ -297,14 +297,14 @@ apm_synthesize_hotplug_events (void) |
64 | /* Set appropriate properties on the computer object */ |
65 | hal_device_property_set_string (computer, "power_management.type", "apm"); |
66 | |
67 | - hotplug_event = g_new0 (HotplugEvent, 1); |
68 | + hotplug_event = g_slice_new0 (HotplugEvent); |
69 | hotplug_event->action = HOTPLUG_ACTION_ADD; |
70 | hotplug_event->type = HOTPLUG_EVENT_APM; |
71 | g_strlcpy (hotplug_event->apm.apm_path, "/proc/apm", sizeof (hotplug_event->apm.apm_path)); |
72 | hotplug_event->apm.apm_type = APM_TYPE_BATTERY; |
73 | hotplug_event_enqueue (hotplug_event); |
74 | |
75 | - hotplug_event = g_new0 (HotplugEvent, 1); |
76 | + hotplug_event = g_slice_new0 (HotplugEvent); |
77 | hotplug_event->type = HOTPLUG_EVENT_APM; |
78 | g_strlcpy (hotplug_event->apm.apm_path, "/proc/apm", sizeof (hotplug_event->apm.apm_path)); |
79 | hotplug_event->apm.apm_type = APM_TYPE_AC_ADAPTER; |
80 | @@ -514,7 +514,7 @@ apm_generate_add_hotplug_event (HalDevice *d) |
81 | apm_path = hal_device_property_get_string (d, "linux.apm_path"); |
82 | apm_type = hal_device_property_get_int (d, "linux.apm_type"); |
83 | |
84 | - hotplug_event = g_new0 (HotplugEvent, 1); |
85 | + hotplug_event = g_slice_new0 (HotplugEvent); |
86 | hotplug_event->action = HOTPLUG_ACTION_ADD; |
87 | hotplug_event->type = HOTPLUG_EVENT_APM; |
88 | g_strlcpy (hotplug_event->apm.apm_path, apm_path, sizeof (hotplug_event->apm.apm_path)); |
89 | @@ -532,7 +532,7 @@ apm_generate_remove_hotplug_event (HalDevice *d) |
90 | apm_path = hal_device_property_get_string (d, "linux.apm_path"); |
91 | apm_type = hal_device_property_get_int (d, "linux.apm_type"); |
92 | |
93 | - hotplug_event = g_new0 (HotplugEvent, 1); |
94 | + hotplug_event = g_slice_new0 (HotplugEvent); |
95 | hotplug_event->action = HOTPLUG_ACTION_REMOVE; |
96 | hotplug_event->type = HOTPLUG_EVENT_APM; |
97 | g_strlcpy (hotplug_event->apm.apm_path, apm_path, sizeof (hotplug_event->apm.apm_path)); |
98 | diff --git a/hald/linux/blockdev.c b/hald/linux/blockdev.c |
99 | index 46b5b58..e40b743 100644 |
100 | --- a/hald/linux/blockdev.c |
101 | +++ b/hald/linux/blockdev.c |
102 | @@ -352,7 +352,7 @@ generate_fakevolume_hotplug_event_add_for_storage_device (HalDevice *d) |
103 | |
104 | snprintf (fake_sysfs_path, sizeof(fake_sysfs_path), "%s/fakevolume", sysfs_path); |
105 | |
106 | - hotplug_event = g_new0 (HotplugEvent, 1); |
107 | + hotplug_event = g_slice_new0 (HotplugEvent); |
108 | hotplug_event->action = HOTPLUG_ACTION_ADD; |
109 | hotplug_event->type = HOTPLUG_EVENT_SYSFS_BLOCK; |
110 | g_strlcpy (hotplug_event->sysfs.subsystem, "block", sizeof (hotplug_event->sysfs.subsystem)); |
111 | @@ -942,6 +942,8 @@ hotplug_event_begin_add_blockdev (const gchar *sysfs_path, const gchar *device_f |
112 | is_device_mapper = TRUE; |
113 | } |
114 | } |
115 | + } else { |
116 | + HAL_INFO(("Couldn't find slave volume in devices")); |
117 | } |
118 | } |
119 | g_free (target); |
120 | @@ -1673,7 +1675,7 @@ blockdev_generate_add_hotplug_event (HalDevice *d) |
121 | serial = hal_device_property_get_string (d, "storage.serial"); |
122 | revision = hal_device_property_get_string (d, "storage.firmware_revision"); |
123 | |
124 | - hotplug_event = g_new0 (HotplugEvent, 1); |
125 | + hotplug_event = g_slice_new0 (HotplugEvent); |
126 | hotplug_event->action = HOTPLUG_ACTION_ADD; |
127 | hotplug_event->type = HOTPLUG_EVENT_SYSFS; |
128 | g_strlcpy (hotplug_event->sysfs.subsystem, "block", sizeof (hotplug_event->sysfs.subsystem)); |
129 | @@ -1698,7 +1700,7 @@ blockdev_generate_remove_hotplug_event (HalDevice *d) |
130 | |
131 | sysfs_path = hal_device_property_get_string (d, "linux.sysfs_path"); |
132 | |
133 | - hotplug_event = g_new0 (HotplugEvent, 1); |
134 | + hotplug_event = g_slice_new0 (HotplugEvent); |
135 | hotplug_event->action = HOTPLUG_ACTION_REMOVE; |
136 | hotplug_event->type = HOTPLUG_EVENT_SYSFS; |
137 | g_strlcpy (hotplug_event->sysfs.subsystem, "block", sizeof (hotplug_event->sysfs.subsystem)); |
138 | @@ -1826,7 +1828,7 @@ blockdev_process_mdstat (void) |
139 | } else { |
140 | HAL_INFO (("Adding md device at '%s' ('%s')", sysfs_path, device_file)); |
141 | |
142 | - hotplug_event = g_new0 (HotplugEvent, 1); |
143 | + hotplug_event = g_slice_new0 (HotplugEvent); |
144 | hotplug_event->action = HOTPLUG_ACTION_ADD; |
145 | hotplug_event->type = HOTPLUG_EVENT_SYSFS_BLOCK; |
146 | g_strlcpy (hotplug_event->sysfs.subsystem, "block", sizeof (hotplug_event->sysfs.subsystem)); |
147 | @@ -1879,7 +1881,7 @@ blockdev_process_mdstat (void) |
148 | |
149 | HAL_INFO (("Removing md device at '%s' ('%s')", sysfs_path, device_file)); |
150 | |
151 | - hotplug_event = g_new0 (HotplugEvent, 1); |
152 | + hotplug_event = g_slice_new0 (HotplugEvent); |
153 | hotplug_event->action = HOTPLUG_ACTION_REMOVE; |
154 | hotplug_event->type = HOTPLUG_EVENT_SYSFS_BLOCK; |
155 | g_strlcpy (hotplug_event->sysfs.subsystem, "block", sizeof (hotplug_event->sysfs.subsystem)); |
156 | diff --git a/hald/linux/coldplug.c b/hald/linux/coldplug.c |
157 | index 30949ca..5538aff 100644 |
158 | --- a/hald/linux/coldplug.c |
159 | +++ b/hald/linux/coldplug.c |
160 | @@ -56,6 +56,11 @@ static GHashTable *sysfs_to_udev_map; |
161 | static GSList *device_list; |
162 | static char dev_root[HAL_PATH_MAX]; |
163 | |
164 | +static void hotplug_event_free (HotplugEvent *ev) |
165 | +{ |
166 | + g_slice_free(HotplugEvent, ev); |
167 | +} |
168 | + |
169 | static gboolean |
170 | hal_util_init_sysfs_to_udev_map (void) |
171 | { |
172 | @@ -66,7 +71,7 @@ hal_util_init_sysfs_to_udev_map (void) |
173 | HotplugEvent *hotplug_event = NULL; |
174 | char *p; |
175 | |
176 | - sysfs_to_udev_map = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); |
177 | + sysfs_to_udev_map = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, hotplug_event_free); |
178 | |
179 | /* get udevroot */ |
180 | if (g_spawn_sync ("/", udevroot_argv, NULL, 0, NULL, NULL, |
181 | @@ -132,7 +137,7 @@ hal_util_init_sysfs_to_udev_map (void) |
182 | |
183 | /* new device */ |
184 | if (strncmp(line, "P: ", 3) == 0) { |
185 | - hotplug_event = g_new0 (HotplugEvent, 1); |
186 | + hotplug_event = g_slice_new0 (HotplugEvent); |
187 | g_strlcpy (hotplug_event->sysfs.sysfs_path, "/sys", sizeof(hotplug_event->sysfs.sysfs_path)); |
188 | g_strlcat (hotplug_event->sysfs.sysfs_path, &line[3], sizeof(hotplug_event->sysfs.sysfs_path)); |
189 | continue; |
190 | @@ -203,22 +208,6 @@ error: |
191 | return FALSE; |
192 | } |
193 | |
194 | -static HotplugEvent *pool = NULL; |
195 | -static int pool_next_free = 0; |
196 | -static int pool_num_freed = 0; |
197 | -static int pool_size = 1000; |
198 | - |
199 | -static void |
200 | -pool_free (gpointer data) |
201 | -{ |
202 | - HAL_INFO (("pool_num_freed = %d (of %d)", pool_num_freed, pool_next_free)); |
203 | - pool_num_freed++; |
204 | - if (pool_num_freed == pool_next_free) { |
205 | - HAL_INFO (("Freeing whole pool")); |
206 | - g_free (pool); |
207 | - } |
208 | -} |
209 | - |
210 | static HotplugEvent |
211 | *coldplug_get_hotplug_event(const gchar *sysfs_path, const gchar *subsystem, HotplugEventType type) |
212 | { |
213 | @@ -226,30 +215,13 @@ static HotplugEvent |
214 | const char *pos; |
215 | gchar path[HAL_PATH_MAX]; |
216 | struct stat statbuf; |
217 | - gboolean from_pool = FALSE; |
218 | - |
219 | - /* TODO: FIXME: this is experimental code */ |
220 | - if (pool == NULL) { |
221 | - pool = g_new0 (HotplugEvent, pool_size); |
222 | - pool_next_free = 0; |
223 | - pool_num_freed = 0; |
224 | - } |
225 | |
226 | - if (pool_next_free >= pool_size) { |
227 | - hotplug_event = g_new0 (HotplugEvent, 1); |
228 | - } else { |
229 | - from_pool = TRUE; |
230 | - hotplug_event = pool + pool_next_free++; |
231 | - hotplug_event->free_function = pool_free; |
232 | - } |
233 | + hotplug_event = g_slice_new0 (HotplugEvent); |
234 | |
235 | /* lookup if udev has something stored in its database */ |
236 | hotplug_event_udev = (HotplugEvent *) g_hash_table_lookup (sysfs_to_udev_map, sysfs_path); |
237 | if (hotplug_event_udev != NULL) { |
238 | memcpy(hotplug_event, hotplug_event_udev, sizeof(HotplugEvent)); |
239 | - if (from_pool) { |
240 | - hotplug_event->free_function = pool_free; |
241 | - } |
242 | HAL_INFO (("new event (dev node from udev) '%s' '%s'", hotplug_event->sysfs.sysfs_path, hotplug_event->sysfs.device_file)); |
243 | } else { |
244 | /* device is not in udev database */ |
245 | @@ -301,7 +273,7 @@ static int device_list_insert(const char *path, const char *subsystem, |
246 | if (!(statbuf.st_mode & S_IWUSR)) |
247 | goto error; |
248 | |
249 | - sysfs_dev = g_new0 (struct sysfs_device, 1); |
250 | + sysfs_dev = g_slice_new0 (struct sysfs_device); |
251 | if (sysfs_dev == NULL) |
252 | goto error; |
253 | |
254 | @@ -326,11 +298,11 @@ static int device_list_insert(const char *path, const char *subsystem, |
255 | sysfs_dev->path = g_strdup (path); |
256 | found: |
257 | sysfs_dev->subsystem = g_strdup (subsystem); |
258 | - device_list = g_slist_prepend (device_list, sysfs_dev); |
259 | + device_list = g_slist_append (device_list, sysfs_dev); |
260 | return 0; |
261 | |
262 | error: |
263 | - g_free (sysfs_dev); |
264 | + g_slice_free (struct sysfs_device, sysfs_dev); |
265 | return -1; |
266 | } |
267 | |
268 | @@ -512,7 +484,7 @@ static void queue_events(void) |
269 | |
270 | g_free (sysfs_dev->path); |
271 | g_free (sysfs_dev->subsystem); |
272 | - g_free (sysfs_dev); |
273 | + g_slice_free (struct sysfs_device, sysfs_dev); |
274 | } |
275 | |
276 | g_slist_free (device_list); |
277 | diff --git a/hald/linux/device.c b/hald/linux/device.c |
278 | index a59107f..cd7bc9e 100644 |
279 | --- a/hald/linux/device.c |
280 | +++ b/hald/linux/device.c |
281 | @@ -727,7 +727,7 @@ missing_scsi_host (const gchar *sysfs_path, HotplugEvent *device_event, HotplugA |
282 | |
283 | /* fake host event */ |
284 | rc = TRUE; |
285 | - host_event = g_new0 (HotplugEvent, 1); |
286 | + host_event = g_slice_new0 (HotplugEvent); |
287 | host_event->action = action; |
288 | host_event->type = HOTPLUG_EVENT_SYSFS_DEVICE; |
289 | g_strlcpy (host_event->sysfs.subsystem, "scsi_host", sizeof (host_event->sysfs.subsystem)); |
290 | @@ -4085,7 +4085,7 @@ dev_generate_add_hotplug_event (HalDevice *d) |
291 | sysfs_path = hal_device_property_get_string (d, "linux.sysfs_path"); |
292 | device_file = hal_device_property_get_string (d, "linux.device_file"); |
293 | |
294 | - hotplug_event = g_new0 (HotplugEvent, 1); |
295 | + hotplug_event = g_slice_new0 (HotplugEvent); |
296 | hotplug_event->action = HOTPLUG_ACTION_ADD; |
297 | hotplug_event->type = HOTPLUG_EVENT_SYSFS; |
298 | g_strlcpy (hotplug_event->sysfs.subsystem, subsystem, sizeof (hotplug_event->sysfs.subsystem)); |
299 | @@ -4109,7 +4109,7 @@ dev_generate_remove_hotplug_event (HalDevice *d) |
300 | subsystem = hal_device_property_get_string (d, "linux.subsystem"); |
301 | sysfs_path = hal_device_property_get_string (d, "linux.sysfs_path"); |
302 | |
303 | - hotplug_event = g_new0 (HotplugEvent, 1); |
304 | + hotplug_event = g_slice_new0 (HotplugEvent); |
305 | hotplug_event->action = HOTPLUG_ACTION_REMOVE; |
306 | hotplug_event->type = HOTPLUG_EVENT_SYSFS; |
307 | g_strlcpy (hotplug_event->sysfs.subsystem, subsystem, sizeof (hotplug_event->sysfs.subsystem)); |
308 | diff --git a/hald/linux/hotplug.c b/hald/linux/hotplug.c |
309 | index 56db041..2dbc731 100644 |
310 | --- a/hald/linux/hotplug.c |
311 | +++ b/hald/linux/hotplug.c |
312 | @@ -62,11 +62,7 @@ hotplug_event_end (void *end_token) |
313 | |
314 | hotplug_events_in_progress = g_slist_remove (hotplug_events_in_progress, hotplug_event); |
315 | |
316 | - if (hotplug_event->free_function != NULL) { |
317 | - hotplug_event->free_function (hotplug_event); |
318 | - } else { |
319 | - g_free (hotplug_event); |
320 | - } |
321 | + g_slice_free (HotplugEvent, hotplug_event); |
322 | } |
323 | |
324 | void |
325 | diff --git a/hald/linux/hotplug.h b/hald/linux/hotplug.h |
326 | index 27dc9d5..06a32a5 100644 |
327 | --- a/hald/linux/hotplug.h |
328 | +++ b/hald/linux/hotplug.h |
329 | @@ -57,9 +57,6 @@ typedef struct |
330 | HotplugActionType action; /* Whether the event is add or remove */ |
331 | HotplugEventType type; /* Type of event */ |
332 | gboolean reposted; /* Avoid loops */ |
333 | - |
334 | - void (*free_function) (gpointer data); |
335 | - |
336 | union { |
337 | struct { |
338 | char subsystem[HAL_NAME_MAX]; /* Kernel subsystem the device belongs to */ |
339 | diff --git a/hald/linux/osspec.c b/hald/linux/osspec.c |
340 | index d7a8672..9ba1a5c 100644 |
341 | --- a/hald/linux/osspec.c |
342 | +++ b/hald/linux/osspec.c |
343 | @@ -121,7 +121,7 @@ hald_udev_data (GIOChannel *source, GIOCondition condition, gpointer user_data) |
344 | goto out; |
345 | } |
346 | |
347 | - hotplug_event = g_new0 (HotplugEvent, 1); |
348 | + hotplug_event = g_slice_new0 (HotplugEvent); |
349 | hotplug_event->type = HOTPLUG_EVENT_SYSFS; |
350 | |
351 | while (bufpos < sizeof (buf)) { |
352 | @@ -263,7 +263,7 @@ hald_udev_data (GIOChannel *source, GIOCondition condition, gpointer user_data) |
353 | } |
354 | |
355 | invalid: |
356 | - g_free (hotplug_event); |
357 | + g_slice_free (HotplugEvent, hotplug_event); |
358 | |
359 | out: |
360 | return TRUE; |
361 | -- |
362 | 1.5.3.7 |
363 |