mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-24 01:31:46 +00:00
[hal] Fix segfault in various HAL functions (#4891)
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user