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

List:       kde-core-devel
Subject:    Re: kicker problem
From:       Matthias Ettrich <ettrich () trolltech ! com>
Date:       2000-08-30 16:16:36
[Download RAW message or body]

Mit, 30 Aug 2000 wrote Dirk Mueller:
> On Mit, 30 Aug 2000, Matthias Elter wrote:
> 
> > Kicker sometimes hangs in a DCOP call when it loads multiple applets external \
> > (via the appletproxy) on startup. I'm a bit clueless about what is happening. 
> 
> this also happened with the old API. For some reason there application name
> was already registered, but the process itself died. then the dcop call
> hangs forever. 

This is strange, because the dcopserver is supposed to handle that. If a
connection dies, everybody who's waiting for a reply receives a replyFailed.

There may be something wrong with the order, though. I just applied the
following patch:

--- dcopserver.cpp      2000/08/08 08:13:45     1.98
+++ dcopserver.cpp      2000/08/30 16:15:01
@@ -795,7 +795,8 @@
 
     // Send DCOPReplyFailed to all in conn->waitingForReply
     while (!conn->waitingForReply.isEmpty()) {
-       IceConn iceConn = conn->waitingForReply.take(0);
+       IceConn iceConn = conn->waitingForReply.getLast();
+       conn->waitingForReply.removeLast();
        if (iceConn) {
            DCOPConnection* target = clients.find( iceConn );
            qWarning("DCOP aborting call from '%s' to '%s'", target ? \
target->appId.data() : "<unknown>" , conn->appId.data() ); @@ -811,7 +812,8 @@
 
     // Send DCOPReplyFailed to all in conn->waitingForDelayedReply
     while (!conn->waitingForDelayedReply.isEmpty()) {
-       IceConn iceConn = conn->waitingForDelayedReply.take();
+       IceConn iceConn = conn->waitingForDelayedReply.getLast();
+       conn->waitingForDelayedReply.removeLast();
        if (iceConn) {
            DCOPConnection* target = clients.find( iceConn );
            qWarning("DCOP aborting (delayed) call from '%s' to '%s'", target ? \
target->appId.data() : "<unknown>", conn->appId.data() );                           


I don't believe it makes a difference for the particular problem, though. When
it hangs, we need to find out where exactly. Maybe the server keeps rejecting
the call and DCOPClient::call tries over and over again?


Matthias


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

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