Replacing evil looping code
Bastien Nocera
hadess at hadess.net
Mon Nov 6 05:20:33 PST 2006
Heya,
Right now, we have some evil code in Totem's browser plugin, and I'd
like to see whether it would be possible to replace it using something a
bit more stable.
Here's the code:
//Launch our binary with some special args
if (g_spawn_async_with_pipes (NULL, argv, NULL,
GSpawnFlags(0), NULL, NULL, &mPlayerPID,
use_fd ? &mSendFD : NULL, NULL, NULL, &err) == FALSE)
<snip>
//Set up a signal to know when the service name has started
mWaitForSvc = g_strdup_printf
("org.totem_%d.MozillaPluginService", mPlayerPID);
D("waiting for signal %s", mWaitForSvc);
dbus_g_proxy_add_signal (mProxy, "NameOwnerChanged",
G_TYPE_STRING, G_TYPE_STRING,
G_TYPE_STRING, G_TYPE_INVALID);
dbus_g_proxy_connect_signal (mProxy, "NameOwnerChanged",
G_CALLBACK (NameOwnerChangedCallback),
this, NULL);
<snip>
//Evil crappy loop to wait for the service
g_get_current_time (&then);
g_time_val_add (&then, G_USEC_PER_SEC * 5);
<snip>
/* FIXME FIXME! this loop is evil! */
do {
g_main_context_iteration (NULL, TRUE);
g_get_current_time (&now);
} while (scriptable->IsValid () &&
!mGotSvc &&
(now.tv_sec <= then.tv_sec));
Is it possible to replace all that crap with decent D-Bus code?
I don't think we can use a service, as we're depending on some
command-line arguments (should we pass those to the service in some
other way instead?).
Any other ideas?
Cheers
--
Bastien Nocera <hadess at hadess.net>
More information about the dbus
mailing list