void os_reportClearApiInfo(void) { os_reportInfo *report; report = (os_reportInfo *)os_threadMemGet(OS_THREAD_API_INFO); if (report->reportContext) { os_free(report->reportContext); report->reportContext = NULL; } if (report->sourceLine) { os_free(report->sourceLine); report->sourceLine = NULL; } if (report->callStack) { os_free(report->callStack); report->callStack = NULL; } if (report->description) { os_free(report->description); report->description = NULL; } os_threadMemFree(OS_THREAD_API_INFO); }
void saj_dataReaderListenerOnRequestedIncompatibleQos( void* listenerData, gapi_dataReader dataReader, const gapi_requestedIncompatibleQosStatus* status) { saj_listenerData ld; JNIEnv *env; jobject jstatus; jobject jdataReader; saj_returnCode rc; ld = saj_listenerData(listenerData); env = *(JNIEnv**)os_threadMemGet(OS_THREAD_JVM); rc = saj_statusCopyOutRequestedIncompatibleQosStatus(env, (gapi_requestedIncompatibleQosStatus *)status, &jstatus); if(rc == SAJ_RETCODE_OK) { jdataReader = saj_read_java_address(dataReader); (*env)->CallVoidMethod(env, ld->jlistener, GET_CACHED(listener_onRequestedIncompatibleQos_mid), jdataReader, jstatus); } }
os_result os_threadUnprotect(void) { os_result result; os_threadProtectInfo *pi; pi = os_threadMemGet(OS_THREAD_PROTECT); if (pi) { pi->protectCount--; #ifndef INTEGRITY if (pi->protectCount == 0) { if (pthread_sigmask(SIG_SETMASK,&pi->oldMask,NULL) != 0) { result = os_resultFail; } else { result = os_resultSuccess; } } else { #endif result = os_resultSuccess; #ifndef INTEGRITY } #endif } else { result = os_resultFail; } return result; }
os_result os_threadProtect(void) { os_result result; os_threadProtectInfo *pi; pi = os_threadMemGet(OS_THREAD_PROTECT); if (pi == NULL) { pi = os_threadMemMalloc(OS_THREAD_PROTECT, sizeof(os_threadProtectInfo), NULL, NULL); if (pi) { pi->protectCount = 1; result = os_resultSuccess; } else { result = os_resultFail; } } else { pi->protectCount++; result = os_resultSuccess; } #ifndef INTEGRITY if ((result == os_resultSuccess) && (pi->protectCount == 1)) { if (pthread_sigmask(SIG_SETMASK, &os_threadBlockAllMask, &pi->oldMask) != 0) { result = os_resultFail; } } #endif return result; }
void* DJA_UtilityBridge_us_getThreadSessionUserData() { DLRL_INFO(INF_ENTER); DLRL_INFO(INF_EXIT); return (void*)(*(JNIEnv**)os_threadMemGet(OS_THREAD_JVM)); }
void DJA_UtilityBridge_us_doThreadDetach( DLRL_Exception* exception, void* userData) { JavaVM *jvm; JNIEnv* env; jint jresult; DLRL_INFO(INF_ENTER); assert(exception); env = *(JNIEnv**)os_threadMemGet(OS_THREAD_JVM); jresult = (*env)->GetJavaVM(env, &jvm); if(jresult != 0){ DLRL_Exception_THROW(exception, DLRL_OUT_OF_MEMORY, "Unable to complete operation. Out of resources."); } jresult = (*jvm)->DetachCurrentThread(jvm); os_threadMemFree(OS_THREAD_JVM); if(jresult != 0){ DLRL_Exception_THROW(exception, DLRL_OUT_OF_MEMORY, "Unable to complete operation. Out of resources."); } DLRL_Exception_EXIT(exception); DLRL_INFO(INF_EXIT); }
void saj_topicListenerOnInconsistentTopic( void* listenerData, gapi_topic topic, const gapi_inconsistentTopicStatus *status) { saj_listenerData ld; JNIEnv *env; jobject jstatus; jobject jtopic; saj_returnCode rc; ld = saj_listenerData(listenerData); env = *(JNIEnv**)os_threadMemGet(OS_THREAD_JVM); rc = saj_statusCopyOutInconsistentTopicStatus(env, (gapi_inconsistentTopicStatus *)status, &jstatus); if(rc == SAJ_RETCODE_OK){ jtopic = saj_read_java_address(topic); (*env)->CallVoidMethod( env, ld->jlistener, GET_CACHED(listener_onInconsistentTopic_mid), jtopic, jstatus); } }
void os_reportSetApiInfoDescription( const char *description, ...) { os_reportInfo *report; va_list args; char * descriptionCopy = NULL; /* since description may point to report->description*/ if (description) { descriptionCopy = os_strdup(description); } report = (os_reportInfo *)os_threadMemGet(OS_THREAD_API_INFO); if (report) { if (report->description) { os_free(report->description); report->description = NULL; } if (descriptionCopy) { report->description = (char*) os_malloc(OS_MAX_DESCRIPTIONSIZE); if (report->description) { va_start(args, description); os_vsnprintf(report->description, OS_MAX_DESCRIPTIONSIZE-1, descriptionCopy, args); va_end(args); } } } os_free(descriptionCopy); }
static void os_reportSetApiInfoRec( const char *reportContext, const char *sourceLine, const char *callStack, os_int32 reportCode, const char *description, va_list args) { os_reportInfo *report; char * descriptionCopy = NULL; /* since description may point to report->description*/ if (description) { descriptionCopy = os_strdup(description); } report = (os_reportInfo *)os_threadMemGet(OS_THREAD_API_INFO); if (report == NULL) { report = (os_reportInfo *)os_threadMemMalloc(OS_THREAD_API_INFO, sizeof(os_reportInfo)); if (report) memset(report, 0, sizeof(os_reportInfo)); } if (report) { if (report->reportContext) { os_free(report->reportContext); report->reportContext = NULL; } if (reportContext) { report->reportContext = os_strdup(reportContext); } if (report->sourceLine) { os_free(report->sourceLine); report->sourceLine = NULL; } if (sourceLine) { report->sourceLine = os_strdup(sourceLine); } if (report->callStack) { os_free(report->callStack); report->callStack = NULL; } if (callStack) { report->callStack = os_strdup(callStack); } report->reportCode = reportCode; if (report->description) { os_free(report->description); report->description = NULL; } if (descriptionCopy) { report->description = (char*) os_malloc(OS_MAX_DESCRIPTIONSIZE); if (report->description) { os_vsnprintf(report->description, OS_MAX_DESCRIPTIONSIZE-1, descriptionCopy, args); } } } os_free(descriptionCopy); }
os_reportInfo * os_reportGetApiInfo(void) { os_reportInfo *report; report = (os_reportInfo *)os_threadMemGet(OS_THREAD_API_INFO); return report; }
static void printThreadMessage( const char *context) { char *msg = os_threadMemGet(OS_THREAD_WARNING); if (msg) { OS_REPORT(OS_ERROR,context,0,msg); os_threadMemFree(OS_THREAD_WARNING); } }
void os_reportSetApiInfoCode( os_int32 reportCode) { os_reportInfo *report; report = (os_reportInfo *)os_threadMemGet(OS_THREAD_API_INFO); if (report) { report->reportCode = reportCode; } }
void saj_listenerDetach( void* listener_data) { JavaVM *jvm; JNIEnv* env; jint jresult; env = *(JNIEnv**)os_threadMemGet(OS_THREAD_JVM); jresult = (*env)->GetJavaVM(env, &jvm); assert(jresult == 0); jresult = (*jvm)->DetachCurrentThread(jvm); os_threadMemFree(OS_THREAD_JVM); assert(jresult == 0); }
void saj_dataReaderListenerOnDataAvailable( void* listenerData, gapi_dataReader dataReader) { saj_listenerData ld; JNIEnv *env; jobject jdataReader; ld = saj_listenerData(listenerData); env = *(JNIEnv**)os_threadMemGet(OS_THREAD_JVM); jdataReader = saj_read_java_address(dataReader); (*env)->CallVoidMethod(env, ld->jlistener, GET_CACHED(listener_onDataAvailable_mid), jdataReader); }
void saj_extTopicListenerOnAllDataDisposed( void* listenerData, gapi_topic topic) { saj_listenerData ld; JNIEnv *env; jobject jtopic; ld = saj_listenerData(listenerData); env = *(JNIEnv**)os_threadMemGet(OS_THREAD_JVM); jtopic = saj_read_java_address(topic); (*env)->CallVoidMethod(env, ld->jlistener, GET_CACHED(listener_onAllDataDisposed_mid), jtopic); }
void os_reportSetApiInfoLine( const char *sourceLine) { os_reportInfo *report; report = (os_reportInfo *)os_threadMemGet(OS_THREAD_API_INFO); if (report) { if (report->sourceLine) { os_free(report->sourceLine); report->sourceLine = NULL; } if (sourceLine) { report->sourceLine = os_strdup(sourceLine); } } }
void os_reportSetApiInfoContext( const char *reportContext) { os_reportInfo *report; report = (os_reportInfo *)os_threadMemGet(OS_THREAD_API_INFO); if (report) { if (report->reportContext) { os_free(report->reportContext); report->reportContext = NULL; } if (reportContext) { report->reportContext = os_strdup(reportContext); } } }
void os_reportSetApiInfoStack( const char *callStack) { os_reportInfo *report; report = (os_reportInfo *)os_threadMemGet(OS_THREAD_API_INFO); if (report) { if (report->callStack) { os_free(report->callStack); report->callStack = NULL; } if (callStack) { report->callStack = os_strdup(callStack); } } }
void saj_destroy_user_data_callback( void* entityUserData, void* userData) { saj_userData ud; JNIEnv* env; void* threadData; ud = saj_userData(entityUserData); threadData = os_threadMemGet(OS_THREAD_JVM); if (threadData) { env = *(JNIEnv**)threadData; saj_destroy_user_data(env, ud); } else { OS_REPORT(OS_WARNING,"saj_destroy_user_data_callback",0, "No JNIEnv reference found, " "possible leakage of a Java object"); } return; }
c_bool saj_setThreadEnv( JNIEnv *env) { void *threadData; c_bool result; threadData = os_threadMemGet(OS_THREAD_JVM); if (threadData) { *(JNIEnv**)threadData = env; result = FALSE; } else { threadData = os_threadMemMalloc(OS_THREAD_JVM, sizeof(env)); if (threadData) { *(JNIEnv**)threadData = env; result = TRUE; } else { result = FALSE; assert(0); } } return result; }
JNIEnv * saj_getThreadEnv() { return (JNIEnv *)os_threadMemGet(OS_THREAD_JVM); }