Fixed the everlasting IMAP crash-on-timeout bug and the everlasting zombie-chain bug. This eliminates all known bugs in the MDR network layer.
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9373 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
85fa73ff32
commit
a622d7bb47
@ -958,7 +958,9 @@ IMAP4Client::ReceiveLine(BString &out)
|
|||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
// Log an error somewhere instead
|
// Log an error somewhere instead
|
||||||
|
runner->Stop();
|
||||||
runner->ShowError("IMAP Timeout.");
|
runner->ShowError("IMAP Timeout.");
|
||||||
|
return B_TIMED_OUT;
|
||||||
}
|
}
|
||||||
PRINT(("S:%s\n",out.String()));
|
PRINT(("S:%s\n",out.String()));
|
||||||
return len;
|
return len;
|
||||||
@ -1120,7 +1122,9 @@ int IMAP4Client::GetResponse(BString &tag, NestedString *parsed_response, bool r
|
|||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
// Log an error somewhere instead
|
// Log an error somewhere instead
|
||||||
|
runner->Stop();
|
||||||
runner->ShowError("IMAP Timeout.");
|
runner->ShowError("IMAP Timeout.");
|
||||||
|
return B_TIMED_OUT;
|
||||||
}
|
}
|
||||||
return answer;
|
return answer;
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include <Directory.h>
|
#include <Directory.h>
|
||||||
#include <Application.h>
|
#include <Application.h>
|
||||||
#include <Locker.h>
|
#include <Locker.h>
|
||||||
|
#include <MessageQueue.h>
|
||||||
#include <MessageFilter.h>
|
#include <MessageFilter.h>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -335,7 +336,7 @@ BMailChainRunner::MessageReceived(BMessage *msg)
|
|||||||
case 'INIT':
|
case 'INIT':
|
||||||
if (init_addons() == B_OK)
|
if (init_addons() == B_OK)
|
||||||
break;
|
break;
|
||||||
case 'STOP': {
|
case B_QUIT_REQUESTED: {
|
||||||
|
|
||||||
CallCallbacksFor(chain_cb, B_OK);
|
CallCallbacksFor(chain_cb, B_OK);
|
||||||
// who knows what the code was?
|
// who knows what the code was?
|
||||||
@ -539,7 +540,13 @@ BMailChainRunner::get_messages(BStringList *list)
|
|||||||
void
|
void
|
||||||
BMailChainRunner::Stop()
|
BMailChainRunner::Stop()
|
||||||
{
|
{
|
||||||
PostMessage('STOP');
|
BMessageQueue *looper_queue = MessageQueue();
|
||||||
|
looper_queue->Lock();
|
||||||
|
BMessage *msg;
|
||||||
|
while (msg = looper_queue->NextMessage()) delete msg; //-- Ensure STOP makes the front of the queue
|
||||||
|
|
||||||
|
PostMessage(B_QUIT_REQUESTED);
|
||||||
|
looper_queue->Unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user