Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Number of unread messages

2 views
Skip to first unread message

PM

unread,
May 16, 2008, 2:26:29 AM5/16/08
to
I do delete messages and CopyFileMessage in written order. This code is
triggered by nsIMsgFolderNotificationService. It is handled by
nsIMsgFolderListener:: NewMessageListener. This event starts new thread
and call final operation via nsISupports proxies
(http://developer.mozilla.org/en/docs/nsISupports_proxies) to ensure
that it run in main Thunderbird thread.
When I do this during Tb downloads messages from pop3 server (for
example I received 100 new mails) I get invalid number of unread
messages. I correctly set flag read and unread messages in CopyFileMessages.

I am surprised from this code and I don’t believe that it is thread
safe. And I think that it can cause problems.

NS_IMETHODIMP nsMsgDBFolder::AcquireSemaphore(nsISupports *semHolder)
{
nsresult rv = NS_OK;

if (mSemaphoreHolder == NULL)
{
mSemaphoreHolder = semHolder; //Don't AddRef due to ownership issues.
}
else
rv = NS_MSG_FOLDER_BUSY;

return rv;

}

NS_IMETHODIMP nsMsgDBFolder::ReleaseSemaphore(nsISupports *semHolder)
{
if (!mSemaphoreHolder || mSemaphoreHolder == semHolder)
{
mSemaphoreHolder = NULL;
}
return NS_OK;
}

David Bienvenu

unread,
May 16, 2008, 3:12:03 PM5/16/08
to

PM wrote, On 5/15/2008 11:26 PM:
> I do delete messages and CopyFileMessage in written order. This code
> is triggered by nsIMsgFolderNotificationService. It is handled by
> nsIMsgFolderListener:: NewMessageListener. This event starts new
> thread and call final operation via nsISupports proxies
> (http://developer.mozilla.org/en/docs/nsISupports_proxies) to ensure
> that it run in main Thunderbird thread.
> When I do this during Tb downloads messages from pop3 server (for
> example I received 100 new mails) I get invalid number of unread
> messages. I correctly set flag read and unread messages in
> CopyFileMessages.
>
> I am surprised from this code and I don’t believe that it is thread
> safe. And I think that it can cause problems.
Very little of our code is thread-safe, nor does it claim to be. The
code you quote only tries to protect two pieces of code on the UI thread
from ever contending over a folder, not to protect code from different
threads.

- David

0 new messages