[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