mirror of
https://github.com/Relintai/sdl2_frt.git
synced 2025-04-12 10:42:01 +02:00
Fixed exception at shutdown if the controllers are closed after the HIDDeviceManager is shutdown
This commit is contained in:
parent
80d075a01a
commit
cb986aff9f
@ -436,6 +436,12 @@ public:
|
|||||||
g_JVM->AttachCurrentThread( &env, NULL );
|
g_JVM->AttachCurrentThread( &env, NULL );
|
||||||
pthread_setspecific( g_ThreadKey, (void*)env );
|
pthread_setspecific( g_ThreadKey, (void*)env );
|
||||||
|
|
||||||
|
if ( !g_HIDDeviceManagerCallbackHandler )
|
||||||
|
{
|
||||||
|
LOGV( "Device open without callback handler" );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
m_bIsWaitingForOpen = false;
|
m_bIsWaitingForOpen = false;
|
||||||
m_bOpenResult = env->CallBooleanMethod( g_HIDDeviceManagerCallbackHandler, g_midHIDDeviceManagerOpen, m_nId );
|
m_bOpenResult = env->CallBooleanMethod( g_HIDDeviceManagerCallbackHandler, g_midHIDDeviceManagerOpen, m_nId );
|
||||||
ExceptionCheck( env, "BOpen" );
|
ExceptionCheck( env, "BOpen" );
|
||||||
@ -545,11 +551,18 @@ public:
|
|||||||
g_JVM->AttachCurrentThread( &env, NULL );
|
g_JVM->AttachCurrentThread( &env, NULL );
|
||||||
pthread_setspecific( g_ThreadKey, (void*)env );
|
pthread_setspecific( g_ThreadKey, (void*)env );
|
||||||
|
|
||||||
jbyteArray pBuf = NewByteArray( env, pData, nDataLen );
|
int nRet = -1;
|
||||||
int nRet = env->CallIntMethod( g_HIDDeviceManagerCallbackHandler, g_midHIDDeviceManagerSendOutputReport, m_nId, pBuf );
|
if ( g_HIDDeviceManagerCallbackHandler )
|
||||||
ExceptionCheck( env, "SendOutputReport" );
|
{
|
||||||
|
jbyteArray pBuf = NewByteArray( env, pData, nDataLen );
|
||||||
env->DeleteLocalRef( pBuf );
|
nRet = env->CallIntMethod( g_HIDDeviceManagerCallbackHandler, g_midHIDDeviceManagerSendOutputReport, m_nId, pBuf );
|
||||||
|
ExceptionCheck( env, "SendOutputReport" );
|
||||||
|
env->DeleteLocalRef( pBuf );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOGV( "SendOutputReport without callback handler" );
|
||||||
|
}
|
||||||
return nRet;
|
return nRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -560,10 +573,18 @@ public:
|
|||||||
g_JVM->AttachCurrentThread( &env, NULL );
|
g_JVM->AttachCurrentThread( &env, NULL );
|
||||||
pthread_setspecific( g_ThreadKey, (void*)env );
|
pthread_setspecific( g_ThreadKey, (void*)env );
|
||||||
|
|
||||||
jbyteArray pBuf = NewByteArray( env, pData, nDataLen );
|
int nRet = -1;
|
||||||
int nRet = env->CallIntMethod( g_HIDDeviceManagerCallbackHandler, g_midHIDDeviceManagerSendFeatureReport, m_nId, pBuf );
|
if ( g_HIDDeviceManagerCallbackHandler )
|
||||||
ExceptionCheck( env, "SendFeatureReport" );
|
{
|
||||||
env->DeleteLocalRef( pBuf );
|
jbyteArray pBuf = NewByteArray( env, pData, nDataLen );
|
||||||
|
nRet = env->CallIntMethod( g_HIDDeviceManagerCallbackHandler, g_midHIDDeviceManagerSendFeatureReport, m_nId, pBuf );
|
||||||
|
ExceptionCheck( env, "SendFeatureReport" );
|
||||||
|
env->DeleteLocalRef( pBuf );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOGV( "SendFeatureReport without callback handler" );
|
||||||
|
}
|
||||||
return nRet;
|
return nRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -587,6 +608,12 @@ public:
|
|||||||
g_JVM->AttachCurrentThread( &env, NULL );
|
g_JVM->AttachCurrentThread( &env, NULL );
|
||||||
pthread_setspecific( g_ThreadKey, (void*)env );
|
pthread_setspecific( g_ThreadKey, (void*)env );
|
||||||
|
|
||||||
|
if ( !g_HIDDeviceManagerCallbackHandler )
|
||||||
|
{
|
||||||
|
LOGV( "GetFeatureReport without callback handler" );
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
hid_mutex_guard cvl( &m_cvLock );
|
hid_mutex_guard cvl( &m_cvLock );
|
||||||
if ( m_bIsWaitingForFeatureReport )
|
if ( m_bIsWaitingForFeatureReport )
|
||||||
@ -657,8 +684,11 @@ public:
|
|||||||
g_JVM->AttachCurrentThread( &env, NULL );
|
g_JVM->AttachCurrentThread( &env, NULL );
|
||||||
pthread_setspecific( g_ThreadKey, (void*)env );
|
pthread_setspecific( g_ThreadKey, (void*)env );
|
||||||
|
|
||||||
env->CallVoidMethod( g_HIDDeviceManagerCallbackHandler, g_midHIDDeviceManagerClose, m_nId );
|
if ( g_HIDDeviceManagerCallbackHandler )
|
||||||
ExceptionCheck( env, "Close" );
|
{
|
||||||
|
env->CallVoidMethod( g_HIDDeviceManagerCallbackHandler, g_midHIDDeviceManagerClose, m_nId );
|
||||||
|
ExceptionCheck( env, "Close" );
|
||||||
|
}
|
||||||
|
|
||||||
hid_mutex_guard dataLock( &m_dataLock );
|
hid_mutex_guard dataLock( &m_dataLock );
|
||||||
m_vecData.clear();
|
m_vecData.clear();
|
||||||
|
Loading…
Reference in New Issue
Block a user