X-Git-Url: http://git.maemo.org/git/?p=browser-switch;a=blobdiff_plain;f=main.c;h=2dfe43923117d18c877b20966fcf61971155e75b;hp=5296631faea3e803f1af9666ce13dcf19dba62f2;hb=ae25c6b332df1c92b1433474bbf4c8b8b857b7ff;hpb=807b507a9f6cc3be8f12d68f7849da970652a9a6 diff --git a/main.c b/main.c index 5296631..2dfe439 100644 --- a/main.c +++ b/main.c @@ -103,6 +103,7 @@ int main() { OssoBrowser *obj_osso_browser, *obj_osso_browser_req; GMainLoop *mainloop; GError *error = NULL; + int reqname_result; read_config(0); @@ -146,6 +147,27 @@ int main() { return 1; } + /* Get the org.maemo.garage.browser-switchboard name from D-Bus, as + a form of locking to ensure that not more than one + browser-switchboard process is active at any time. With + DBUS_NAME_FLAG_DO_NOT_QUEUE set and DBUS_NAME_FLAG_REPLACE_EXISTING + not set, getting the name succeeds if and only if no other + process owns the name. */ + if (!dbus_g_proxy_call(ctx.dbus_proxy, "RequestName", &error, + G_TYPE_STRING, "org.maemo.garage.browser-switchboard", + G_TYPE_UINT, DBUS_NAME_FLAG_DO_NOT_QUEUE, + G_TYPE_INVALID, + G_TYPE_UINT, &reqname_result, + G_TYPE_INVALID)) { + printf("Couldn't acquire browser-switchboard lock: %s\n", + error->message); + return 1; + } + if (reqname_result != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) { + printf("Another browser-switchboard already running\n"); + return 1; + } + dbus_request_osso_browser_name(&ctx); /* Register ourselves to handle the osso_browser D-Bus methods */