[Pkg-voip-commits] r8182 - in /qutecom/trunk/debian: changelog patches/libpurple-glib.patch patches/purple-wait-init.patch patches/series
cavedon at alioth.debian.org
cavedon at alioth.debian.org
Tue Mar 9 19:37:07 UTC 2010
Author: cavedon
Date: Tue Mar 9 19:37:03 2010
New Revision: 8182
URL: http://svn.debian.org/wsvn/pkg-voip/?sc=1&rev=8182
Log:
add purple-wait-init.patch
Added:
qutecom/trunk/debian/patches/purple-wait-init.patch
Modified:
qutecom/trunk/debian/changelog
qutecom/trunk/debian/patches/libpurple-glib.patch
qutecom/trunk/debian/patches/series
Modified: qutecom/trunk/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-voip/qutecom/trunk/debian/changelog?rev=8182&op=diff
==============================================================================
--- qutecom/trunk/debian/changelog (original)
+++ qutecom/trunk/debian/changelog Tue Mar 9 19:37:03 2010
@@ -2,13 +2,13 @@
* Add fix-binutils-gold.patch for building with binutils-gold.
Closes: #556311.
- * Add libpurple-glib.patch from upstream for fixing crash with external
- liburple.
+ * Add libpurple-glib.patch and purple-wait-init.patch for fixing crash with
+ external liburple.
* Compile against external libpurple (CVE-2010-0423, CVE-2010-0420,
CVE-2010-0277). Closes: #559785, #572946.
* Update Standards-Version to 3.8.4.
- -- Ludovico Cavedon <cavedon at debian.org> Tue, 09 Mar 2010 10:11:08 +0100
+ -- Ludovico Cavedon <cavedon at debian.org> Tue, 09 Mar 2010 20:35:47 +0100
qutecom (2.2~rc3.hg396~dfsg1-5) unstable; urgency=low
Modified: qutecom/trunk/debian/patches/libpurple-glib.patch
URL: http://svn.debian.org/wsvn/pkg-voip/qutecom/trunk/debian/patches/libpurple-glib.patch?rev=8182&op=diff
==============================================================================
--- qutecom/trunk/debian/patches/libpurple-glib.patch (original)
+++ qutecom/trunk/debian/patches/libpurple-glib.patch Tue Mar 9 19:37:03 2010
@@ -1,6 +1,7 @@
Description: libpurple init and destroy in the glib thread
Origin: http://trac.qutecom.org/changeset/519%3A7ea7b6493d47
Bug: http://trac.qutecom.org/ticket/175
+Reviewed-by: Ludovico Cavedon <cavedon at debian.org>
# HG changeset patch
# User nikita <nikita at mbdsys.com>
@@ -11,8 +12,8 @@
Index: qutecom-2.2~rc3.hg396~dfsg1/libs/imwrapper/src/purple/PurpleIMFactory.cpp
===================================================================
---- qutecom-2.2~rc3.hg396~dfsg1.orig/libs/imwrapper/src/purple/PurpleIMFactory.cpp 2010-03-08 22:59:01.000000000 +0100
-+++ qutecom-2.2~rc3.hg396~dfsg1/libs/imwrapper/src/purple/PurpleIMFactory.cpp 2010-03-08 23:02:40.000000000 +0100
+--- qutecom-2.2~rc3.hg396~dfsg1.orig/libs/imwrapper/src/purple/PurpleIMFactory.cpp 2009-05-23 05:49:45.000000000 +0200
++++ qutecom-2.2~rc3.hg396~dfsg1/libs/imwrapper/src/purple/PurpleIMFactory.cpp 2010-03-09 20:32:41.000000000 +0100
@@ -198,6 +198,63 @@
NULL
};
@@ -54,14 +55,14 @@
+
+ purple_request_set_ui_ops(&request_wg_ops);
+
-+ LOG_DEBUG("CREAT TID %x", pthread_self());
+ if (!purple_core_init("QuteCom PURPLE")) {
+ LOG_WARN("Initialization of the Purple core failed\n");
+ }
+}
+
+static gboolean purple_wg_init_lib(gpointer data) {
-+ MyPurpleIMInit((const gchar *)data);
++ MyPurpleIMInit((gchar*)data);
++ g_free(data);
+ return false;
+}
+
@@ -77,28 +78,57 @@
bool PurpleIMFactory::equals(const IMAccount & imAccount, std::string login, EnumIMProtocol::IMProtocol protocol) {
return ((imAccount.getLogin() == login) && (imAccount.getProtocol() == protocol));
}
-@@ -270,7 +327,7 @@
+@@ -239,38 +296,8 @@
+ PresenceMngr->Init();
}
+-void PurpleIMFactory::PurpleIMInit(const std::string & pathToProfile) {
+-
+- char * home_dir = g_build_filename(pathToProfile.c_str(), "purple", NULL);
+-
+- // Remove Purple config directory
+- File file(home_dir);
+- file.remove();
+-
+- File::createPath(home_dir + File::getPathSeparator());
+- purple_util_set_user_dir(home_dir);
+-
+- if(getenv("OW_PURPLE_DEBUG")) {
+- purple_debug_set_enabled(TRUE);
+- }
+-
+- purple_core_set_ui_ops(&core_wg_ops);
+- purple_eventloop_set_ui_ops(&eventloop_wg_ops);
+-
+- char * search_path = g_build_filename(Path::getApplicationDirPath().c_str(), "plugins", NULL);
+- purple_plugins_add_search_path(search_path);
+- purple_plugins_add_search_path("plugins");
+- g_free(search_path);
+-
+- purple_request_set_ui_ops(&request_wg_ops);
+-
+- if (!purple_core_init("Wengo PURPLE")) {
+- LOG_WARN("Initialization of the Purple core failed\n");
+- }
+-}
+-
void PurpleIMFactory::init(const std::string & pathToProfile) {
- PurpleIMInit(pathToProfile);
+ g_idle_add(purple_wg_init_lib, (gpointer)g_strdup(pathToProfile.c_str()));
PurpleWrapperInit();
}
-@@ -285,12 +342,12 @@
+@@ -285,12 +312,7 @@
if (AccountMngr) {
AccountMngr->reset();
}
-
- purple_connections_set_ui_ops(&null_conn_wg_ops);
+- purple_accounts_set_ui_ops(&null_acc_wg_ops);
+- purple_blist_set_ui_ops(&null_blist_wg_ops);
+-
+- purple_core_quit();
+ g_idle_add(purple_wg_destroy_lib, NULL);
-+ /*purple_connections_set_ui_ops(&null_conn_wg_ops);
- purple_accounts_set_ui_ops(&null_acc_wg_ops);
- purple_blist_set_ui_ops(&null_blist_wg_ops);
-
-- purple_core_quit();
-+ purple_core_quit();*/
}
IMConnect * PurpleIMFactory::createIMConnect(IMAccount &account) {
Added: qutecom/trunk/debian/patches/purple-wait-init.patch
URL: http://svn.debian.org/wsvn/pkg-voip/qutecom/trunk/debian/patches/purple-wait-init.patch?rev=8182&op=file
==============================================================================
--- qutecom/trunk/debian/patches/purple-wait-init.patch (added)
+++ qutecom/trunk/debian/patches/purple-wait-init.patch Tue Mar 9 19:37:03 2010
@@ -1,0 +1,144 @@
+Description: make sure libpurple has been initialized before continuing
+Author: Ludovico Cavedon <cavedon at debian.org>
+Bug: http://trac.qutecom.org/ticket/175
+
+# HG changeset patch
+# User Ludovico Cavedon <ludovico.cavedon at gmail.com>
+# Date 1268142076 -3600
+# Node ID bc42369ae74c8e9954ea953988859df363644085
+# Parent 2c4848ebda24751c476a61406b84c1f3c2104ac0
+make sure libpurple has been initialized before continuing (ticket #175)
+
+Index: qutecom-2.2~rc3.hg396~dfsg1/libs/imwrapper/src/purple/PurpleIMFactory.cpp
+===================================================================
+--- qutecom-2.2~rc3.hg396~dfsg1.orig/libs/imwrapper/src/purple/PurpleIMFactory.cpp 2010-03-09 20:32:41.000000000 +0100
++++ qutecom-2.2~rc3.hg396~dfsg1/libs/imwrapper/src/purple/PurpleIMFactory.cpp 2010-03-09 20:33:14.000000000 +0100
+@@ -240,21 +240,55 @@
+ }
+ }
+
++struct PurpleInitData {
++ PurpleInitData(const std::string & _pathToProfile, PurpleIMFactory *_imfactory) :
++ pathToProfile(_pathToProfile), imfactory(_imfactory) { }
++
++ const std::string & pathToProfile;
++ PurpleIMFactory *imfactory;
++};
++
+ static gboolean purple_wg_init_lib(gpointer data) {
+- MyPurpleIMInit((gchar*)data);
+- g_free(data);
++ PurpleInitData *initData = static_cast<PurpleInitData *>(data);
++
++ MyPurpleIMInit(initData->pathToProfile.c_str());
++
++ initData->imfactory->purpleStatusChanged(true);
++
+ return false;
+ }
+
+ static gboolean purple_wg_destroy_lib(gpointer data) {
++ PurpleIMFactory *imfactory = static_cast<PurpleIMFactory *>(data);
++
+ purple_connections_set_ui_ops(&null_conn_wg_ops);
+ purple_accounts_set_ui_ops(&null_acc_wg_ops);
+ purple_blist_set_ui_ops(&null_blist_wg_ops);
+
+ purple_core_quit();
++
++ imfactory->purpleStatusChanged(false);
++
+ return false;
+ }
+
++
++void PurpleIMFactory::purpleStatusChanged(bool init) {
++ g_assert(purple_init != init);
++ g_mutex_lock(purple_init_mutex);
++ purple_init = init;
++ g_cond_signal(purple_init_cond);
++ g_mutex_unlock(purple_init_mutex);
++}
++
++void PurpleIMFactory::purpleStatusChangeWait(bool init) {
++ g_mutex_lock(purple_init_mutex);
++ while(purple_init != init) {
++ g_cond_wait(purple_init_cond, purple_init_mutex);
++ }
++ g_mutex_unlock(purple_init_mutex);
++}
++
+ bool PurpleIMFactory::equals(const IMAccount & imAccount, std::string login, EnumIMProtocol::IMProtocol protocol) {
+ return ((imAccount.getLogin() == login) && (imAccount.getProtocol() == protocol));
+ }
+@@ -269,6 +303,9 @@
+ if (!g_thread_supported()) {
+ g_thread_init(NULL);
+ }
++ purple_init = false;
++ purple_init_cond = g_cond_new();
++ purple_init_mutex = g_mutex_new();
+ g_thread_create(PurpleMainEventLoop, NULL, FALSE, NULL);
+ }
+
+@@ -279,6 +316,8 @@
+ } else {
+ LOG_ERROR("No gMainLoop created");
+ }
++ g_mutex_free(purple_init_mutex);
++ g_cond_free(purple_init_cond);
+ }
+
+ void PurpleIMFactory::PurpleSetCallbacks() {
+@@ -297,7 +336,12 @@
+ }
+
+ void PurpleIMFactory::init(const std::string & pathToProfile) {
+- g_idle_add(purple_wg_init_lib, (gpointer)g_strdup(pathToProfile.c_str()));
++ g_assert(!purple_init);
++ PurpleInitData initData(pathToProfile, this);
++ g_idle_add(purple_wg_init_lib, &initData);
++
++ purpleStatusChangeWait(true);
++
+ PurpleWrapperInit();
+ }
+
+@@ -312,7 +356,10 @@
+ if (AccountMngr) {
+ AccountMngr->reset();
+ }
+- g_idle_add(purple_wg_destroy_lib, NULL);
++
++ g_idle_add(purple_wg_destroy_lib, this);
++
++ purpleStatusChangeWait(false);
+ }
+
+ IMConnect * PurpleIMFactory::createIMConnect(IMAccount &account) {
+Index: qutecom-2.2~rc3.hg396~dfsg1/libs/imwrapper/src/purple/PurpleIMFactory.h
+===================================================================
+--- qutecom-2.2~rc3.hg396~dfsg1.orig/libs/imwrapper/src/purple/PurpleIMFactory.h 2009-05-23 05:49:45.000000000 +0200
++++ qutecom-2.2~rc3.hg396~dfsg1/libs/imwrapper/src/purple/PurpleIMFactory.h 2010-03-09 20:33:14.000000000 +0100
+@@ -69,6 +69,10 @@
+
+ static void PurpleQuitCallback();
+
++ void purpleStatusChanged(bool init);
++
++ void purpleStatusChangeWait(bool init);
++
+ private:
+
+ PurpleAccountMngr *AccountMngr;
+@@ -82,6 +86,10 @@
+ void PurpleWrapperInit();
+
+ static PurpleIMFactory *_instance;
++
++ bool purple_init;
++ GCond *purple_init_cond;
++ GMutex *purple_init_mutex;
+ };
+
+ #endif //OWPURPLEIMFACTORY_H
Modified: qutecom/trunk/debian/patches/series
URL: http://svn.debian.org/wsvn/pkg-voip/qutecom/trunk/debian/patches/series?rev=8182&op=diff
==============================================================================
--- qutecom/trunk/debian/patches/series (original)
+++ qutecom/trunk/debian/patches/series Tue Mar 9 19:37:03 2010
@@ -11,3 +11,4 @@
#curl-openssl-mt-fix.patch
fix-binutils-gold.patch
libpurple-glib.patch
+purple-wait-init.patch
More information about the Pkg-voip-commits
mailing list