aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/core/basetypes/MCObject.cpp6
-rw-r--r--src/core/basetypes/MCOperationQueue.cpp1
-rw-r--r--src/core/imap/MCIMAPSession.cpp1
-rw-r--r--src/core/nntp/MCNNTPSession.cpp1
-rw-r--r--src/core/provider/MCMailProvidersManager.cpp4
-rw-r--r--src/core/provider/MCMailProvidersManager.h1
-rw-r--r--src/java/JavaHandle.cpp14
-rw-r--r--src/java/JavaHandle.h2
-rw-r--r--src/java/JavaIMAPOperationCallback.cpp4
-rw-r--r--src/java/native/com_libmailcore_IMAPAppendMessageOperation.cpp2
-rw-r--r--src/java/native/com_libmailcore_IMAPFetchContentOperation.cpp5
-rw-r--r--src/java/native/com_libmailcore_IMAPFetchMessagesOperation.cpp2
-rw-r--r--src/java/native/com_libmailcore_IMAPFetchParsedContentOperation.cpp2
-rw-r--r--src/java/native/com_libmailcore_IMAPSession.cpp4
-rw-r--r--src/java/native/com_libmailcore_NNTPSession.cpp4
-rw-r--r--src/java/native/com_libmailcore_POPSession.cpp4
-rw-r--r--src/java/native/com_libmailcore_SMTPSession.cpp4
-rw-r--r--src/objc/imap/MCOIMAPFetchFoldersOperation.mm2
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];