diff options
Diffstat (limited to 'dbus-gmain/tests/30574.c')
-rw-r--r-- | dbus-gmain/tests/30574.c | 139 |
1 files changed, 0 insertions, 139 deletions
diff --git a/dbus-gmain/tests/30574.c b/dbus-gmain/tests/30574.c deleted file mode 100644 index ca7b79f..0000000 --- a/dbus-gmain/tests/30574.c +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright © 2010-2012 Mike Gorse - * Copyright © 2011-2018 Collabora Ltd. - * - * Licensed under the Academic Free License version 2.1 - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <stdio.h> -#include <stdlib.h> -#include <dbus/dbus.h> -#include <glib.h> -#include <dbus-gmain/dbus-gmain.h> -#include "util.h" - -DBusConnection *bus; -GMainContext *main_context; - -typedef struct _SpiReentrantCallClosure -{ - GMainLoop *loop; - DBusMessage *reply; -} SpiReentrantCallClosure; - -static void -set_reply (DBusPendingCall * pending, void *user_data) -{ - SpiReentrantCallClosure* closure = (SpiReentrantCallClosure *) user_data; - - closure->reply = dbus_pending_call_steal_reply (pending); - DBUS_GMAIN_FUNCTION_NAME (set_up_connection) (bus, NULL); - - g_main_loop_quit (closure->loop); -} - -static DBusMessage * -send_and_allow_reentry (DBusConnection * bus, DBusMessage * message, - dbus_bool_t switch_after_send) -{ - DBusPendingCall *pending; - SpiReentrantCallClosure closure; - - closure.loop = g_main_loop_new (main_context, FALSE); - DBUS_GMAIN_FUNCTION_NAME (set_up_connection) (bus, - (switch_after_send ? NULL : - main_context)); - - if (!dbus_connection_send_with_reply (bus, message, &pending, 3000)) - { - DBUS_GMAIN_FUNCTION_NAME (set_up_connection) (bus, NULL); - return NULL; - } - dbus_pending_call_set_notify (pending, set_reply, (void *) &closure, NULL); - if (switch_after_send) - DBUS_GMAIN_FUNCTION_NAME (set_up_connection) (bus, main_context); - g_main_loop_run (closure.loop); - - g_main_loop_unref (closure.loop); - dbus_pending_call_unref (pending); - return closure.reply; -} - -static void -send_test_message (dbus_bool_t switch_after_send) -{ - DBusMessage *message, *reply; - const char *str; - DBusError error; - - dbus_error_init (&error); - message = dbus_message_new_method_call ("org.freedesktop.DBus", - "/org/freedesktop/DBus", - DBUS_INTERFACE_DBUS, "GetId"); - reply = send_and_allow_reentry (bus, message, switch_after_send); - if (!reply) - { - fprintf(stderr, "Got no reply from send_and_allow_reentry\n"); - exit(1); - } - if (dbus_message_get_type (reply) == DBUS_MESSAGE_TYPE_ERROR) - { - char *err = NULL; - dbus_message_get_args (reply, NULL, DBUS_TYPE_STRING, &err, DBUS_TYPE_INVALID); - fprintf (stderr, "Got error: %s\n", err); - exit(1); - } - if (!dbus_message_get_args (reply, &error, DBUS_TYPE_STRING, &str, DBUS_TYPE_INVALID)) - { - fprintf(stderr, "Sorry; can't communicate: %s\n", error.message); - exit(1); - } - dbus_message_unref (reply); - dbus_message_unref (message); -} - -int -main(int argc, const char *argv[]) -{ - DBusError error; - - main_context = g_main_context_new (); - dbus_error_init (&error); - bus = dbus_bus_get_private (DBUS_BUS_SESSION, &error); - if (!bus) - { - fprintf(stderr, "Couldn't connect to bus: %s\n", error.name); - return 1; - } - DBUS_GMAIN_FUNCTION_NAME (set_up_connection) (bus, NULL); - send_test_message (FALSE); - send_test_message (FALSE); - send_test_message (TRUE); - - test_run_until_disconnected (bus, NULL); - dbus_connection_unref (bus); - - dbus_shutdown (); - g_main_context_unref (main_context); - - return 0; -} |