[hal] Fix segfault in various HAL functions (#4891)

This commit is contained in:
Dustin Spicuzza
2023-01-02 02:19:04 -05:00
committed by GitHub
parent b0c6724eed
commit 25db20e49d
8 changed files with 25 additions and 1 deletions

View File

@@ -85,6 +85,9 @@ HAL_CANHandle HAL_InitializeCAN(HAL_CANManufacturer manufacturer,
void HAL_CleanCAN(HAL_CANHandle handle) {
auto data = canHandles->Free(handle);
if (data == nullptr) {
return;
}
std::scoped_lock lock(data->mapMutex);

View File

@@ -710,6 +710,9 @@ void HAL_StopDMA(HAL_DMAHandle handle, int32_t* status) {
void* HAL_GetDMADirectPointer(HAL_DMAHandle handle) {
auto dma = dmaHandles->Get(handle);
if (dma == nullptr) {
return nullptr;
}
return dma.get();
}

View File

@@ -123,6 +123,9 @@ SIM_JniHandle sim::AllocateBufferCallback(
void sim::FreeBufferCallback(JNIEnv* env, SIM_JniHandle handle, jint index,
FreeBufferCallbackFunc freeCallback) {
auto callback = callbackHandles->Free(handle);
if (callback == nullptr) {
return;
}
freeCallback(index, callback->getCallbackId());
callback->free(env);
}

View File

@@ -116,6 +116,9 @@ SIM_JniHandle sim::AllocateConstBufferCallback(
void sim::FreeConstBufferCallback(JNIEnv* env, SIM_JniHandle handle, jint index,
FreeConstBufferCallbackFunc freeCallback) {
auto callback = callbackHandles->Free(handle);
if (callback == nullptr) {
return;
}
freeCallback(index, callback->getCallbackId());
callback->free(env);
}

View File

@@ -242,6 +242,9 @@ static SIM_JniHandle AllocateDeviceCallback(
static void FreeDeviceCallback(JNIEnv* env, SIM_JniHandle handle,
FreeDeviceCallbackFunc freeCallback) {
auto callback = deviceCallbackHandles->Free(handle);
if (callback == nullptr) {
return;
}
freeCallback(callback->getCallbackId());
callback->free(env);
}
@@ -296,6 +299,9 @@ static SIM_JniHandle AllocateValueCallback(
static void FreeValueCallback(JNIEnv* env, SIM_JniHandle handle,
FreeValueCallbackFunc freeCallback) {
auto callback = valueCallbackHandles->Free(handle);
if (callback == nullptr) {
return;
}
freeCallback(callback->getCallbackId());
callback->free(env);
}

View File

@@ -127,6 +127,9 @@ SIM_JniHandle sim::AllocateSpiBufferCallback(
void sim::FreeSpiBufferCallback(JNIEnv* env, SIM_JniHandle handle, jint index,
FreeSpiBufferCallbackFunc freeCallback) {
auto callback = callbackHandles->Free(handle);
if (callback == nullptr) {
return;
}
freeCallback(index, callback->getCallbackId());
callback->free(env);
}

View File

@@ -93,6 +93,9 @@ HAL_CANHandle HAL_InitializeCAN(HAL_CANManufacturer manufacturer,
void HAL_CleanCAN(HAL_CANHandle handle) {
auto data = canHandles->Free(handle);
if (data == nullptr) {
return;
}
std::scoped_lock lock(data->mapMutex);

View File

@@ -53,7 +53,7 @@ bool GetEncoderBaseHandle(HAL_EncoderHandle handle,
HAL_FPGAEncoderHandle* fpgaHandle,
HAL_CounterHandle* counterHandle) {
auto encoder = encoderHandles->Get(handle);
if (!handle) {
if (!encoder) {
return false;
}