javamanager/javainstaller/installer/src.s60/applicationregistrator/sifnotifier.cpp
--- a/javamanager/javainstaller/installer/src.s60/applicationregistrator/sifnotifier.cpp Thu May 27 12:49:31 2010 +0300
+++ b/javamanager/javainstaller/installer/src.s60/applicationregistrator/sifnotifier.cpp Fri Jun 11 13:33:44 2010 +0300
@@ -161,7 +161,7 @@
jstring aGlobalComponentId, jint aErrCategory, jint aErrCode,
jstring aErrMsg, jstring aErrMsgDetails)
{
- __UHEAP_MARK;
+ //__UHEAP_MARK;
HBufC *globalComponentId = CreateHBufCFromJavaStringLC(aEnv, aGlobalComponentId);
HBufC *errMsg = NULL;
if (NULL != aErrMsg)
@@ -174,24 +174,29 @@
errMsgDetails = CreateHBufCFromJavaStringLC(aEnv, aErrMsgDetails);
}
- CSifOperationEndData *endData = CSifOperationEndData::NewLC(
- *globalComponentId, (TErrorCategory)aErrCategory, aErrCode,
- *errMsg, *errMsgDetails);
+ CSifOperationEndData *endData =
+ CSifOperationEndData::NewLC(
+ *globalComponentId, (TErrorCategory)aErrCategory, aErrCode,
+ (NULL != errMsg? *errMsg: KNullDesC()),
+ (NULL != errMsgDetails? *errMsgDetails: KNullDesC()));
+ // Do not use UHEAP macros around PublishCompletionL() because it
+ // creates a timer object which gets deleted only when the notifier
+ // object is deleted.
aNotifier->PublishCompletionL(*endData);
CleanupStack::PopAndDestroy(endData);
- if (NULL != aErrMsg)
+ if (NULL != errMsgDetails)
+ {
+ CleanupStack::PopAndDestroy(errMsgDetails);
+ }
+ if (NULL != errMsg)
{
CleanupStack::PopAndDestroy(errMsg);
}
- if (NULL != aErrMsgDetails)
- {
- CleanupStack::PopAndDestroy(errMsgDetails);
- }
CleanupStack::PopAndDestroy(globalComponentId);
- __UHEAP_MARKEND;
+ //__UHEAP_MARKEND;
}
/*
@@ -203,10 +208,25 @@
(JNIEnv *aEnv, jclass, jint aHandle, jstring aGlobalComponentId,
jint aErrCategory, jint aErrCode, jstring aErrMsg, jstring aErrMsgDetails)
{
+ CActiveScheduler* newScheduler = 0;
+ if (0 == CActiveScheduler::Current())
+ {
+ // Create ActiveScheduler as it does not yet exist.
+ newScheduler = new CActiveScheduler;
+ CActiveScheduler::Install(newScheduler);
+ }
+
CPublishSifOperationInfo *pNotifier =
reinterpret_cast<CPublishSifOperationInfo*>(aHandle<<2);
TRAPD(err, NotifyEndL(aEnv, pNotifier, aGlobalComponentId,
aErrCategory, aErrCode, aErrMsg, aErrMsgDetails));
+
+ if (newScheduler)
+ {
+ delete newScheduler;
+ newScheduler = 0;
+ }
+
return err;
}