51
51
for (i = 0; i < XMMS_IPC_SIGNAL_END; i++) {
52
52
if (object->signals[i]) {
53
53
GList *list = object->signals[i];
56
for (node = list; node; node = g_list_next (node)) {
57
list = g_list_delete_link (list, list);
171
168
g_mutex_unlock (object->mutex);
173
for (node = list2; node; node = g_list_next (node)) {
176
173
if (entry && entry->handler)
177
174
entry->handler (object, data, entry->userdata);
176
list2 = g_list_delete_link (list2, list2);
183
180
xmms_object_cmd_value_t *
218
218
val = g_new0 (xmms_object_cmd_value_t, 1);
219
219
val->value.int32 = i;
220
220
val->type = XMMS_OBJECT_CMD_ARG_INT32;
224
225
xmms_object_cmd_value_t *
225
xmms_object_cmd_value_dict_new (GHashTable *dict)
226
xmms_object_cmd_value_dict_new (GTree *dict)
227
228
xmms_object_cmd_value_t *val;
228
229
val = g_new0 (xmms_object_cmd_value_t, 1);
229
230
val->value.dict = dict;
230
231
val->type = XMMS_OBJECT_CMD_ARG_DICT;
236
xmms_object_cmd_value_t *
237
xmms_object_cmd_value_hash_table_new (GHashTable *hash)
239
xmms_object_cmd_value_t *val;
240
val = g_new0 (xmms_object_cmd_value_t, 1);
241
val->value.hash = hash;
242
val->type = XMMS_OBJECT_CMD_ARG_HASH_TABLE;
267
283
xmms_object_cmd_value_t *val;
268
284
val = g_new0 (xmms_object_cmd_value_t, 1);
269
285
val->type = XMMS_OBJECT_CMD_ARG_NONE;
273
xmms_object_cmd_value_t *
274
xmms_object_cmd_value_copy (xmms_object_cmd_value_t *val)
276
xmms_object_cmd_value_t *ret = NULL;
278
g_return_val_if_fail (val, NULL);
281
case XMMS_OBJECT_CMD_ARG_BIN:
282
ret = xmms_object_cmd_value_bin_new (val->value.bin);
284
case XMMS_OBJECT_CMD_ARG_STRING:
285
ret = xmms_object_cmd_value_str_new (val->value.string);
287
case XMMS_OBJECT_CMD_ARG_UINT32:
288
ret = xmms_object_cmd_value_uint_new (val->value.uint32);
290
case XMMS_OBJECT_CMD_ARG_INT32:
291
ret = xmms_object_cmd_value_int_new (val->value.int32);
293
case XMMS_OBJECT_CMD_ARG_NONE:
294
ret = xmms_object_cmd_value_none_new ();
296
case XMMS_OBJECT_CMD_ARG_DICT:
297
case XMMS_OBJECT_CMD_ARG_LIST:
298
case XMMS_OBJECT_CMD_ARG_PROPDICT:
299
case XMMS_OBJECT_CMD_ARG_STRINGLIST:
300
case XMMS_OBJECT_CMD_ARG_COLL:
301
/** Unsupported for now */
302
XMMS_DBG ("Unsupported value passed to value_copy()");
310
xmms_object_cmd_value_free (gpointer val)
312
xmms_object_cmd_value_t *v = val;
313
g_return_if_fail (v);
291
xmms_object_cmd_value_free (xmms_object_cmd_value_t *v)
315
293
switch (v->type) {
316
294
case XMMS_OBJECT_CMD_ARG_STRING:
317
295
if (v->value.string)
324
302
case XMMS_OBJECT_CMD_ARG_LIST:
325
303
case XMMS_OBJECT_CMD_ARG_PROPDICT:
326
304
while (v->value.list) {
327
xmms_object_cmd_value_free (v->value.list->data);
305
xmms_object_cmd_value_unref (v->value.list->data);
328
306
v->value.list = g_list_delete_link (v->value.list,
339
317
case XMMS_OBJECT_CMD_ARG_DICT:
340
318
if (v->value.dict) {
341
g_hash_table_destroy (v->value.dict);
319
g_tree_destroy (v->value.dict);
323
case XMMS_OBJECT_CMD_ARG_HASH_TABLE:
325
g_hash_table_destroy (v->value.hash);
345
330
case XMMS_OBJECT_CMD_ARG_COLL:
346
331
if (v->value.coll) {
347
332
xmmsc_coll_unref (v->value.coll);
343
xmms_object_cmd_value_unref (xmms_object_cmd_value_t *val)
345
g_return_if_fail (val);
349
if (!val->refcount) {
350
xmms_object_cmd_value_free (val);
354
xmms_object_cmd_value_t *
355
xmms_object_cmd_value_ref (xmms_object_cmd_value_t *val)
357
g_return_val_if_fail (val, NULL);
358
365
* Initialize a command argument.
400
407
arg.retval = xmms_object_cmd_value_str_new (va_arg (ap, gchar *));
402
409
case XMMS_OBJECT_CMD_ARG_BIN:
403
arg.retval = xmms_object_cmd_value_bin_new ((GString *) va_arg (ap, gpointer));
410
arg.retval = xmms_object_cmd_value_bin_new (va_arg (ap, GString *));
405
412
case XMMS_OBJECT_CMD_ARG_DICT:
406
arg.retval = xmms_object_cmd_value_dict_new ((GHashTable *) va_arg (ap, gpointer));
413
arg.retval = xmms_object_cmd_value_dict_new (va_arg (ap, GTree *));
415
case XMMS_OBJECT_CMD_ARG_HASH_TABLE:
416
arg.retval = xmms_object_cmd_value_hash_table_new (va_arg (ap, GHashTable *));
408
418
case XMMS_OBJECT_CMD_ARG_LIST:
409
419
case XMMS_OBJECT_CMD_ARG_PROPDICT:
410
420
case XMMS_OBJECT_CMD_ARG_STRINGLIST:
411
arg.retval = xmms_object_cmd_value_list_new ((GList *) va_arg (ap, gpointer));
421
arg.retval = xmms_object_cmd_value_list_new (va_arg (ap, GList *));
413
423
case XMMS_OBJECT_CMD_ARG_COLL:
414
arg.retval = xmms_object_cmd_value_coll_new ((xmmsc_coll_t *) va_arg (ap, gpointer));
424
arg.retval = xmms_object_cmd_value_coll_new (va_arg (ap, xmmsc_coll_t *));
416
426
case XMMS_OBJECT_CMD_ARG_NONE:
417
427
arg.retval = xmms_object_cmd_value_none_new ();
422
432
xmms_object_emit (object, signalid, &arg);
425
* Let's not use value_free since that will free whatever
426
* is in the struct also. This should be owned by the
435
* We're only calling xmms_object_cmd_value_unref() here for
436
* retvals that either hold no payload at all (_ARG_NONE) or that
437
* have their own copy/reference in the payload (_ARG_STRING and
429
if (type != XMMS_OBJECT_CMD_ARG_NONE)
441
case XMMS_OBJECT_CMD_ARG_STRING:
442
case XMMS_OBJECT_CMD_ARG_NONE:
443
xmms_object_cmd_value_unref (arg.retval);