Search
j0ke.net Open Build Service
>
Projects
>
multimedia
>
amarok
> yauap-deadlock.diff
Sign Up
|
Log In
Username
Password
Cancel
Overview
Repositories
Revisions
Requests
Users
Advanced
Attributes
Meta
File yauap-deadlock.diff of Package amarok (Revision 5)
Currently displaying revision
5
,
show latest
Index: amarok/src/engine/yauap/yauap-engine.cpp =================================================================== --- amarok/src/engine/yauap/yauap-engine.cpp (revision 717759) +++ amarok/src/engine/yauap/yauap-engine.cpp (working copy) @@ -67,6 +70,16 @@ signal_handler( DBusConnection * /*con*/ return (handled ? DBUS_HANDLER_RESULT_HANDLED : DBUS_HANDLER_RESULT_NOT_YET_HANDLED); } +int +yauapProcess::commSetupDoneC() +{ + Amarok::Process::commSetupDoneC(); + int fd = open("/dev/null", O_RDWR); + dup2(fd, 1); + dup2(fd, 2); + close(fd); +} + /* create a qt dbus connection that will receive the signals */ bool DBusConnection::open() @@ -212,16 +225,16 @@ DBusConnection::send_with_reply(const ch YAUAP_DBUS_SERVICE, YAUAP_DBUS_PATH, YAUAP_DBUS_INTERFACE, method); if (msg) { - dbus_message_append_args_valist(msg, first_arg_type, ap); + DBusError error; dbus_error_init(&error); - DBusPendingCall* pcall = 0; + dbus_message_append_args_valist(msg, first_arg_type, ap); - dbus_connection_send_with_reply(dbus_connection, msg, &pcall, -1); - dbus_message_unref (msg); + DBusMessage* oldmsg = msg; + msg = dbus_connection_send_with_reply_and_block(dbus_connection, oldmsg, -1, &error); + dbus_message_unref (oldmsg); - dbus_pending_call_block(pcall); - msg = dbus_pending_call_steal_reply(pcall); - dbus_pending_call_unref(pcall); + if (!msg) + debug() << "dbus error while waiting for reply: " << error.message << endl; } return msg; Index: amarok/src/engine/yauap/yauap-engine.h =================================================================== --- amarok/src/engine/yauap/yauap-engine.h (revision 717759) +++ amarok/src/engine/yauap/yauap-engine.h (working copy) @@ -19,7 +19,7 @@ copyright : (C) 2006 by Sasch #define DBUS_API_SUBJECT_TO_CHANGE #include <dbus/connection.h> -#include <kprocess.h> +#include <amarok.h> #include "enginebase.h" #include "debug.h" @@ -47,6 +47,14 @@ public: int call(const char *method, int first_arg_type, ...); }; +class yauapProcess : public Amarok::Process +{ +public: + yauapProcess(QObject* parent) : Amarok::Process(parent) {} + + virtual int commSetupDoneC(); +}; + class yauapEngine : public Engine::Base { Q_OBJECT @@ -70,7 +78,7 @@ class yauapEngine : public Engine::Base virtual bool getAudioCDContents(const QString &device, KURL::List &urls); virtual bool metaDataForUrl(const KURL &url, Engine::SimpleMetaBundle &b); public: - yauapEngine() : EngineBase() {} + yauapEngine() : EngineBase(), helper(0) {} /* these need to be public because they are called from the dbus signal handler */ void update_metadata(); void update_scope(); @@ -90,7 +98,7 @@ private: Engine::State m_state; DBusConnection *con; /* helper process to start */ - KProcess helper; + yauapProcess helper; }; #endif