TencentCloud / tencentcloud-iot-sdk-embedded-c

SDK for connecting to Tencent Cloud IoT from a device using embedded C.
https://cloud.tencent.com/product/iothub
Other
148 stars 71 forks source link

at_client.c 多线程模式存在宕机问题 #31

Closed xin5683 closed 3 years ago

xin5683 commented 3 years ago

https://github.com/tencentyun/qcloud-iot-sdk-embedded-c/blob/5381d0efd99efe96337c29ecbdf64c3e40a1cb59/sdk_src/network/at_socket/at_client.c#L840-L851

https://github.com/tencentyun/qcloud-iot-sdk-embedded-c/blob/5381d0efd99efe96337c29ecbdf64c3e40a1cb59/platform/os/freertos/HAL_OS_freertos.c#L165-L193

at_client.c 840行创建线程的handle是局部变量,在HAL_OS_freertos.c 中 创建完线程回调_HAL_thread_funcwrapper 传入的参数是线程的handle,创建线程函数已经退出,handle里内容已经被释放,_HAL_thread_func_wrapper_的params->thread_func 函数指针会变为0或者野指针,导致系统宕机。

spikelin commented 3 years ago

嗯嗯,在HAL_ThreadCreate之后适当延时几百毫秒,或者把thread_params作为static变量可以解决这个问题。 后续版本修复这个问题,感谢指正