diff options
18 files changed, 37 insertions, 26 deletions
diff --git a/src/core/basetypes/MCObject.cpp b/src/core/basetypes/MCObject.cpp index c9d8d464..65f67588 100644 --- a/src/core/basetypes/MCObject.cpp +++ b/src/core/basetypes/MCObject.cpp @@ -341,8 +341,10 @@ void Object::performMethodOnDispatchQueueAfterDelay(Method method, void * contex initDelayedPerform(); __block bool cancelled = false; - + + void (^dupCancelableBlock)(bool cancel) = NULL; void (^cancelableBlock)(bool cancel) = ^(bool cancel) { + Block_release(dupCancelableBlock); if (cancel) { cancelled = true; return; @@ -352,7 +354,7 @@ void Object::performMethodOnDispatchQueueAfterDelay(Method method, void * contex } }; - void (^dupCancelableBlock)(bool cancel) = Block_copy(cancelableBlock); + dupCancelableBlock = Block_copy(cancelableBlock); retain(); addToPerformHash(this, method, context, targetDispatchQueue, (void *) dupCancelableBlock); diff --git a/src/core/basetypes/MCOperationQueue.cpp b/src/core/basetypes/MCOperationQueue.cpp index bfe3a6fb..0652eb75 100644 --- a/src/core/basetypes/MCOperationQueue.cpp +++ b/src/core/basetypes/MCOperationQueue.cpp @@ -258,6 +258,7 @@ void OperationQueue::startThread() mQuitting = false; mStarted = true; pthread_create(&mThreadID, NULL, (void * (*)(void *)) OperationQueue::runOperationsOnThread, this); + pthread_detach(mThreadID); mailsem_down(mStartSem); } diff --git a/src/core/imap/MCIMAPSession.cpp b/src/core/imap/MCIMAPSession.cpp index 9b0e6a66..e72576d1 100644 --- a/src/core/imap/MCIMAPSession.cpp +++ b/src/core/imap/MCIMAPSession.cpp @@ -3024,6 +3024,7 @@ void IMAPSession::fetchMessageAttachmentToFileByChunksByUID(String * folder, uin } if (data == NULL) { + pool->release(); break; } diff --git a/src/core/nntp/MCNNTPSession.cpp b/src/core/nntp/MCNNTPSession.cpp index ae383581..7e0018e6 100644 --- a/src/core/nntp/MCNNTPSession.cpp +++ b/src/core/nntp/MCNNTPSession.cpp @@ -499,6 +499,7 @@ Data * NNTPSession::fetchArticleByMessageID(String * messageID, ErrorCode * pErr msgID = strdup(messageID->UTF8Characters()); r = newsnntp_article_by_message_id(mNNTP, msgID, &content, &content_len); + free(msgID); if (r == NEWSNNTP_ERROR_STREAM) { * pError = ErrorConnection; return NULL; diff --git a/src/core/provider/MCMailProvidersManager.cpp b/src/core/provider/MCMailProvidersManager.cpp index a5f7891a..f802d7ff 100644 --- a/src/core/provider/MCMailProvidersManager.cpp +++ b/src/core/provider/MCMailProvidersManager.cpp @@ -21,6 +21,10 @@ MailProvidersManager::MailProvidersManager() { init(); } +MailProvidersManager::~MailProvidersManager() { + MC_SAFE_RELEASE(mProviders); +} + MailProvidersManager * MailProvidersManager::sharedManager() { static MailProvidersManager * instance = new MailProvidersManager(); diff --git a/src/core/provider/MCMailProvidersManager.h b/src/core/provider/MCMailProvidersManager.h index 774c2d30..88723563 100644 --- a/src/core/provider/MCMailProvidersManager.h +++ b/src/core/provider/MCMailProvidersManager.h @@ -30,6 +30,7 @@ namespace mailcore { private: MailProvidersManager(); + ~MailProvidersManager(); void registerProviders(HashMap * providers); HashMap * mProviders; diff --git a/src/java/JavaHandle.cpp b/src/java/JavaHandle.cpp index 1bf799e3..fdefc49a 100644 --- a/src/java/JavaHandle.cpp +++ b/src/java/JavaHandle.cpp @@ -2,15 +2,15 @@ using namespace mailcore; -static jfieldID getField(JNIEnv * env, jobject obj, const char * fieldName) +static jfieldID getField(JNIEnv * env, jobject obj, const char * fieldName, const char * fieldClass) { jclass c = env->GetObjectClass(obj); - return env->GetFieldID(c, fieldName, "J"); + return env->GetFieldID(c, fieldName, fieldClass); } static jfieldID getHandleField(JNIEnv * env, jobject obj) { - return getField(env, obj, "nativeHandle"); + return getField(env, obj, "nativeHandle", "J"); } void * mailcore::getHandle(JNIEnv * env, jobject obj) @@ -27,17 +27,17 @@ void mailcore::setHandle(JNIEnv *env, jobject obj, void *t) void * mailcore::getCustomHandle(JNIEnv * env, jobject obj, const char * fieldName) { - jlong handle = env->GetLongField(obj, getField(env, obj, fieldName)); + jlong handle = env->GetLongField(obj, getField(env, obj, fieldName, "J")); return (void *) handle; } void mailcore::setCustomHandle(JNIEnv *env, jobject obj, const char * fieldName, void *t) { jlong handle = reinterpret_cast<jlong>(t); - env->SetLongField(obj, getField(env, obj, fieldName), handle); + env->SetLongField(obj, getField(env, obj, fieldName, "J"), handle); } -jobject mailcore::getObjectField(JNIEnv *env, jobject obj, const char * fieldName) +jobject mailcore::getObjectField(JNIEnv *env, jobject obj, const char * fieldName, const char * fieldClass) { - return env->GetObjectField(obj, getField(env, obj, fieldName)); + return env->GetObjectField(obj, getField(env, obj, fieldName, fieldClass)); }
\ No newline at end of file diff --git a/src/java/JavaHandle.h b/src/java/JavaHandle.h index 19e8aee8..6c2b9413 100644 --- a/src/java/JavaHandle.h +++ b/src/java/JavaHandle.h @@ -9,7 +9,7 @@ namespace mailcore { void setHandle(JNIEnv * env, jobject obj, void * t); void * getCustomHandle(JNIEnv * env, jobject obj, const char * fieldName); void setCustomHandle(JNIEnv *env, jobject obj, const char * fieldName, void *t); - jobject getObjectField(JNIEnv *env, jobject obj, const char * fieldName); + jobject getObjectField(JNIEnv *env, jobject obj, const char * fieldName, const char * fieldClass); } #endif diff --git a/src/java/JavaIMAPOperationCallback.cpp b/src/java/JavaIMAPOperationCallback.cpp index fba857b8..c37e0c58 100644 --- a/src/java/JavaIMAPOperationCallback.cpp +++ b/src/java/JavaIMAPOperationCallback.cpp @@ -29,7 +29,7 @@ void JavaIMAPOperationCallback::bodyProgress(IMAPOperation * session, unsigned i JNIEnv * env = mEnv; jclass cls = mEnv->GetObjectClass(mListener); jmethodID mid = mEnv->GetMethodID(cls, "bodyProgress", "(JJ)V"); - mEnv->CallVoidMethod(mListener, mid); + mEnv->CallVoidMethod(mListener, mid, (jlong) current, (jlong) maximum); } void JavaIMAPOperationCallback::itemProgress(IMAPOperation * session, unsigned int current, unsigned int maximum) @@ -41,5 +41,5 @@ void JavaIMAPOperationCallback::itemProgress(IMAPOperation * session, unsigned i JNIEnv * env = mEnv; jclass cls = mEnv->GetObjectClass(mListener); jmethodID mid = mEnv->GetMethodID(cls, "itemProgress", "(JJ)V"); - mEnv->CallVoidMethod(mListener, mid); + mEnv->CallVoidMethod(mListener, mid, (jlong) current, (jlong) maximum); } diff --git a/src/java/native/com_libmailcore_IMAPAppendMessageOperation.cpp b/src/java/native/com_libmailcore_IMAPAppendMessageOperation.cpp index 16da4df2..69b17f08 100644 --- a/src/java/native/com_libmailcore_IMAPAppendMessageOperation.cpp +++ b/src/java/native/com_libmailcore_IMAPAppendMessageOperation.cpp @@ -55,7 +55,7 @@ JNIEXPORT void JNICALL Java_com_libmailcore_IMAPAppendMessageOperation_setupNati MC_SAFE_RELEASE(callback); MC_JAVA_NATIVE_INSTANCE->setImapCallback(NULL); - jobject javaListener = getObjectField(env, obj, "listener"); + jobject javaListener = getObjectField(env, obj, "listener", "J"); if (javaListener != NULL) { callback = new JavaIMAPOperationCallback(env, javaListener); MC_JAVA_NATIVE_INSTANCE->setImapCallback(callback); diff --git a/src/java/native/com_libmailcore_IMAPFetchContentOperation.cpp b/src/java/native/com_libmailcore_IMAPFetchContentOperation.cpp index a8be97b8..24d3a090 100644 --- a/src/java/native/com_libmailcore_IMAPFetchContentOperation.cpp +++ b/src/java/native/com_libmailcore_IMAPFetchContentOperation.cpp @@ -38,9 +38,10 @@ JNIEXPORT void JNICALL Java_com_libmailcore_IMAPFetchContentOperation_setupNativ MC_SAFE_RELEASE(callback); MC_JAVA_NATIVE_INSTANCE->setImapCallback(NULL); - jobject javaListener = getObjectField(env, obj, "listener"); + jobject javaListener = getObjectField(env, obj, "listener", "Lcom/libmailcore/IMAPOperationProgressListener;"); if (javaListener != NULL) { - callback = new JavaIMAPOperationCallback(env, javaListener); + jobject c = reinterpret_cast<jobject>(env->NewGlobalRef(javaListener)); + callback = new JavaIMAPOperationCallback(env, c); MC_JAVA_NATIVE_INSTANCE->setImapCallback(callback); } MC_POOL_END; diff --git a/src/java/native/com_libmailcore_IMAPFetchMessagesOperation.cpp b/src/java/native/com_libmailcore_IMAPFetchMessagesOperation.cpp index ed0fae09..c1d07d9f 100644 --- a/src/java/native/com_libmailcore_IMAPFetchMessagesOperation.cpp +++ b/src/java/native/com_libmailcore_IMAPFetchMessagesOperation.cpp @@ -49,7 +49,7 @@ JNIEXPORT void JNICALL Java_com_libmailcore_IMAPFetchMessagesOperation_setupNati MC_SAFE_RELEASE(callback); MC_JAVA_NATIVE_INSTANCE->setImapCallback(NULL); - jobject javaListener = getObjectField(env, obj, "listener"); + jobject javaListener = getObjectField(env, obj, "listener", "J"); if (javaListener != NULL) { callback = new JavaIMAPOperationCallback(env, javaListener); MC_JAVA_NATIVE_INSTANCE->setImapCallback(callback); diff --git a/src/java/native/com_libmailcore_IMAPFetchParsedContentOperation.cpp b/src/java/native/com_libmailcore_IMAPFetchParsedContentOperation.cpp index da639f2c..b058b9df 100644 --- a/src/java/native/com_libmailcore_IMAPFetchParsedContentOperation.cpp +++ b/src/java/native/com_libmailcore_IMAPFetchParsedContentOperation.cpp @@ -38,7 +38,7 @@ JNIEXPORT void JNICALL Java_com_libmailcore_IMAPFetchParsedContentOperation_setu MC_SAFE_RELEASE(callback); MC_JAVA_NATIVE_INSTANCE->setImapCallback(NULL); - jobject javaListener = getObjectField(env, obj, "listener"); + jobject javaListener = getObjectField(env, obj, "listener", "J"); if (javaListener != NULL) { callback = new JavaIMAPOperationCallback(env, javaListener); MC_JAVA_NATIVE_INSTANCE->setImapCallback(callback); diff --git a/src/java/native/com_libmailcore_IMAPSession.cpp b/src/java/native/com_libmailcore_IMAPSession.cpp index 8be3a37f..2c2ce21c 100644 --- a/src/java/native/com_libmailcore_IMAPSession.cpp +++ b/src/java/native/com_libmailcore_IMAPSession.cpp @@ -479,7 +479,7 @@ JNIEXPORT void JNICALL Java_com_libmailcore_IMAPSession_setupNativeOperationQueu MC_SAFE_RELEASE(callback); MC_JAVA_NATIVE_INSTANCE->setOperationQueueCallback(NULL); - jobject javaListener = getObjectField(env, obj, "operationQueueListener"); + jobject javaListener = getObjectField(env, obj, "operationQueueListener", "J"); if (javaListener != NULL) { callback = new JavaOperationQueueCallback(env, javaListener); MC_JAVA_NATIVE_INSTANCE->setOperationQueueCallback(callback); @@ -495,7 +495,7 @@ JNIEXPORT void JNICALL Java_com_libmailcore_IMAPSession_setupNativeConnectionLog MC_SAFE_RELEASE(logger); MC_JAVA_NATIVE_INSTANCE->setConnectionLogger(NULL); - jobject javaLogger = getObjectField(env, obj, "connectionLogger"); + jobject javaLogger = getObjectField(env, obj, "connectionLogger", "J"); if (javaLogger != NULL) { logger = new JavaConnectionLogger(env, javaLogger); MC_JAVA_NATIVE_INSTANCE->setConnectionLogger(logger); diff --git a/src/java/native/com_libmailcore_NNTPSession.cpp b/src/java/native/com_libmailcore_NNTPSession.cpp index bbae318c..c17d4d9c 100644 --- a/src/java/native/com_libmailcore_NNTPSession.cpp +++ b/src/java/native/com_libmailcore_NNTPSession.cpp @@ -149,7 +149,7 @@ JNIEXPORT void JNICALL Java_com_libmailcore_NNTPSession_setupNativeOperationQueu MC_SAFE_RELEASE(callback); MC_JAVA_NATIVE_INSTANCE->setOperationQueueCallback(NULL); - jobject javaListener = getObjectField(env, obj, "operationQueueListener"); + jobject javaListener = getObjectField(env, obj, "operationQueueListener", "J"); if (javaListener != NULL) { callback = new JavaOperationQueueCallback(env, javaListener); MC_JAVA_NATIVE_INSTANCE->setOperationQueueCallback(callback); @@ -165,7 +165,7 @@ JNIEXPORT void JNICALL Java_com_libmailcore_NNTPSession_setupNativeConnectionLog MC_SAFE_RELEASE(logger); MC_JAVA_NATIVE_INSTANCE->setConnectionLogger(NULL); - jobject javaLogger = getObjectField(env, obj, "connectionLogger"); + jobject javaLogger = getObjectField(env, obj, "connectionLogger", "J"); if (javaLogger != NULL) { logger = new JavaConnectionLogger(env, javaLogger); MC_JAVA_NATIVE_INSTANCE->setConnectionLogger(logger); diff --git a/src/java/native/com_libmailcore_POPSession.cpp b/src/java/native/com_libmailcore_POPSession.cpp index f0dbfd40..78e8d794 100644 --- a/src/java/native/com_libmailcore_POPSession.cpp +++ b/src/java/native/com_libmailcore_POPSession.cpp @@ -123,7 +123,7 @@ JNIEXPORT void JNICALL Java_com_libmailcore_POPSession_setupNativeOperationQueue MC_SAFE_RELEASE(callback); MC_JAVA_NATIVE_INSTANCE->setOperationQueueCallback(NULL); - jobject javaListener = getObjectField(env, obj, "operationQueueListener"); + jobject javaListener = getObjectField(env, obj, "operationQueueListener", "J"); if (javaListener != NULL) { callback = new JavaOperationQueueCallback(env, javaListener); MC_JAVA_NATIVE_INSTANCE->setOperationQueueCallback(callback); @@ -139,7 +139,7 @@ JNIEXPORT void JNICALL Java_com_libmailcore_POPSession_setupNativeConnectionLogg MC_SAFE_RELEASE(logger); MC_JAVA_NATIVE_INSTANCE->setConnectionLogger(NULL); - jobject javaLogger = getObjectField(env, obj, "connectionLogger"); + jobject javaLogger = getObjectField(env, obj, "connectionLogger", "J"); if (javaLogger != NULL) { logger = new JavaConnectionLogger(env, javaLogger); MC_JAVA_NATIVE_INSTANCE->setConnectionLogger(logger); diff --git a/src/java/native/com_libmailcore_SMTPSession.cpp b/src/java/native/com_libmailcore_SMTPSession.cpp index 0d43014c..c831b1f6 100644 --- a/src/java/native/com_libmailcore_SMTPSession.cpp +++ b/src/java/native/com_libmailcore_SMTPSession.cpp @@ -107,7 +107,7 @@ JNIEXPORT void JNICALL Java_com_libmailcore_SMTPSession_setupNativeOperationQueu MC_SAFE_RELEASE(callback); MC_JAVA_NATIVE_INSTANCE->setOperationQueueCallback(NULL); - jobject javaListener = getObjectField(env, obj, "operationQueueListener"); + jobject javaListener = getObjectField(env, obj, "operationQueueListener", "J"); if (javaListener != NULL) { callback = new JavaOperationQueueCallback(env, javaListener); MC_JAVA_NATIVE_INSTANCE->setOperationQueueCallback(callback); @@ -123,7 +123,7 @@ JNIEXPORT void JNICALL Java_com_libmailcore_SMTPSession_setupNativeConnectionLog MC_SAFE_RELEASE(logger); MC_JAVA_NATIVE_INSTANCE->setConnectionLogger(NULL); - jobject javaLogger = getObjectField(env, obj, "connectionLogger"); + jobject javaLogger = getObjectField(env, obj, "connectionLogger", "J"); if (javaLogger != NULL) { logger = new JavaConnectionLogger(env, javaLogger); MC_JAVA_NATIVE_INSTANCE->setConnectionLogger(logger); diff --git a/src/objc/imap/MCOIMAPFetchFoldersOperation.mm b/src/objc/imap/MCOIMAPFetchFoldersOperation.mm index b0965401..97e3ae6c 100644 --- a/src/objc/imap/MCOIMAPFetchFoldersOperation.mm +++ b/src/objc/imap/MCOIMAPFetchFoldersOperation.mm @@ -43,7 +43,7 @@ typedef void (^CompletionType)(NSError *error, NSArray *folder); [super dealloc]; } -- (void) start:(void (^)(NSError *error, NSArray * /* MCOIMAPFolder */ folders))completionBlock +- (void) start:(void (^)(NSError *error, NSArray<MCOIMAPFolder *> *folders))completionBlock { _completionBlock = [completionBlock copy]; [self start]; |