[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-bugs-dist
Subject:    [Bug 127749] kopete freezes on desktop right click
From:       Olivier Goffart <ogoffart () kde ! org>
Date:       2006-06-07 16:07:03
Message-ID: 20060607160703.17569.qmail () ktown ! kde ! org
[Download RAW message or body]

------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
         
http://bugs.kde.org/show_bug.cgi?id=127749         
ogoffart kde org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |FIXED



------- Additional Comments From ogoffart kde org  2006-06-07 18:06 -------
SVN commit 549156 by ogoffart:

Fix Bug 127749: kopete freezes on desktop right click

BUG: 127749

I've taken the patch from jaguarwan, and added some check to assure good reentrency \
due to the call to the evebt loop. Please have a test.


 M  +13 -2     kopeteaway.cpp  


--- branches/kopete/0.12/kopete/libkopete/kopeteaway.cpp #549155:549156
 @ -198,6 +198,8  @
 
 Kopete::Away::~Away()
 {
+	if(this == instance)
+		instance = 0L;	
 	delete d;
 }
 
 @ -324,9 +326,18  @
 	// isn't blanked/locked, because activity while blanked is impossible and
 	// activity while locked never matters (if there is any, it's probably just
 	// the cleaner wiping the keyboard :).
-
+	
+	
+	/* we should be able to respond to KDesktop queries to avoid a deadlock, so we \
allow the event loop to be called */ +	static bool rentrency_protection=false;
+	if(rentrency_protection)
+		return;
+	rentrency_protection=true;
 	DCOPRef screenSaver("kdesktop", "KScreensaverIface");
-	DCOPReply isBlanked = screenSaver.call("isBlanked");
+	DCOPReply isBlanked = screenSaver.callExt("isBlanked" ,  DCOPRef::UseEventLoop, \
10); +	rentrency_protection=false;
+	if(!instance) //this may have been deleted in the event loop
+		return;
 	if (!(isBlanked.isValid() && isBlanked.type == "bool" && ((bool)isBlanked)))
 	{
 		// DCOP failed, or returned something odd, or the screensaver is


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic