measure_queue_stop() 무한 대기 방지
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
#define MEASURE_QUEUE_PERIOD_MS 100U
|
||||
#define MEASURE_QUEUE_THREAD_STACK_SIZE 2048
|
||||
#define MEASURE_QUEUE_THREAD_PRIORITY 7
|
||||
#define MEASURE_QUEUE_STOP_JOIN_TIMEOUT_MS 3000U
|
||||
|
||||
/* data_storage flash partition handle, opened once and reused */
|
||||
static const struct flash_area *queue_area;
|
||||
@@ -305,10 +306,15 @@ int measure_queue_stop(uint32_t *tick_end, uint8_t *session, uint16_t *total_fra
|
||||
queue_recording = false;
|
||||
k_mutex_unlock(&queue_lock);
|
||||
|
||||
int join_err = 0;
|
||||
if (was_running)
|
||||
{
|
||||
// rfe: 응답 시 측정 중인 경우 측정 완료될 때까지 기다림
|
||||
(void)k_thread_join(&queue_thread, K_FOREVER);
|
||||
// Wait for the recording thread, but never block the BLE command path forever.
|
||||
join_err = k_thread_join(&queue_thread, K_MSEC(MEASURE_QUEUE_STOP_JOIN_TIMEOUT_MS));
|
||||
if (join_err)
|
||||
{
|
||||
DBG_ERR("[MFE] record thread join timeout err=%d\r\n", join_err);
|
||||
}
|
||||
}
|
||||
|
||||
k_mutex_lock(&queue_lock, K_FOREVER);
|
||||
@@ -324,7 +330,7 @@ int measure_queue_stop(uint32_t *tick_end, uint8_t *session, uint16_t *total_fra
|
||||
{
|
||||
*total_frames = queue_total_frames;
|
||||
}
|
||||
int status = queue_status;
|
||||
int status = (join_err != 0) ? -ETIMEDOUT : queue_status;
|
||||
uint8_t stop_session = queue_session;
|
||||
uint16_t stop_frames = queue_total_frames;
|
||||
uint16_t num_samples = queue_num_samples;
|
||||
@@ -446,4 +452,4 @@ int measure_queue_read_frame(uint16_t frame_idx, measure_queue_frame_header_t *h
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user