diff --git a/src/add-ons/mail_daemon/inbound_protocols/imap/IMAPInboundProtocol.h b/src/add-ons/mail_daemon/inbound_protocols/imap/IMAPInboundProtocol.h index 2c8217c0f5..f907fc3e9e 100644 --- a/src/add-ons/mail_daemon/inbound_protocols/imap/IMAPInboundProtocol.h +++ b/src/add-ons/mail_daemon/inbound_protocols/imap/IMAPInboundProtocol.h @@ -10,6 +10,7 @@ #include "MailProtocol.h" #include +#include #include #include "MailSettings.h" diff --git a/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPStorage.cpp b/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPStorage.cpp index a8ead88cd2..540f880ecf 100644 --- a/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPStorage.cpp +++ b/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPStorage.cpp @@ -40,6 +40,7 @@ IMAPMailboxSync::Sync(IMAPStorage& storage, IMAPMailbox& mailbox) found = true; if (mailEntry.flags != minMessage.flags) storage.SetFlags(mailEntry.uid, minMessage.flags); + break; } } if (!found) @@ -109,6 +110,18 @@ ReadDirThreadFunction(void *data) } +IMAPStorage::IMAPStorage() +{ + fLoadDatabaseLock = create_sem(1, "sync lock"); +} + + +IMAPStorage::~IMAPStorage() +{ + delete_sem(fLoadDatabaseLock); +} + + void IMAPStorage::SetTo(const char* dir) { @@ -129,10 +142,10 @@ IMAPStorage::StartReadDatabase() return id; // will be unlocked from thread - fLoadDatabaseLock.Lock(); + acquire_sem(fLoadDatabaseLock); status = resume_thread(id); if (status != B_OK) - fLoadDatabaseLock.Unlock(); + release_sem(fLoadDatabaseLock); return status; } @@ -141,9 +154,9 @@ status_t IMAPStorage::WaitForDatabaseReaded() { // just wait for thread - if (!fLoadDatabaseLock.Lock()) + if (acquire_sem(fLoadDatabaseLock) != B_OK) return B_ERROR; - fLoadDatabaseLock.Unlock(); + release_sem(fLoadDatabaseLock); return B_OK; } @@ -440,7 +453,7 @@ IMAPStorage::_ReadFilesThread() fMailEntryMap[entry.uid] = entry; } - fLoadDatabaseLock.Unlock(); + release_sem(fLoadDatabaseLock); return B_OK; } diff --git a/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPStorage.h b/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPStorage.h index 40357767ff..dead7e9102 100644 --- a/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPStorage.h +++ b/src/add-ons/mail_daemon/inbound_protocols/imap/imap_lib/IMAPStorage.h @@ -12,7 +12,7 @@ #include #include -#include +#include #include #include @@ -46,6 +46,9 @@ public: kBodyDownloaded = 0x02 }; + IMAPStorage(); + ~IMAPStorage(); + void SetTo(const char* dir); status_t StartReadDatabase(); @@ -88,7 +91,7 @@ private: BPath fMailboxPath; - BLocker fLoadDatabaseLock; + sem_id fLoadDatabaseLock; MailEntryMap fMailEntryMap; };