void rxtx_task_exec_stop(struct rxtx_data *rxtx, unsigned char *requests, struct bladerf *dev) { int status; *requests = rxtx_get_requests(rxtx, RXTX_TASK_REQ_STOP | RXTX_TASK_REQ_SHUTDOWN); pthread_mutex_lock(&rxtx->data_mgmt.lock); bladerf_deinit_stream(rxtx->data_mgmt.stream); rxtx->data_mgmt.stream = NULL; pthread_mutex_unlock(&rxtx->data_mgmt.lock); pthread_mutex_lock(&rxtx->file_mgmt.file_lock); if (rxtx->file_mgmt.file != NULL) { fclose(rxtx->file_mgmt.file); rxtx->file_mgmt.file = NULL; } pthread_mutex_unlock(&rxtx->file_mgmt.file_lock); if (*requests & RXTX_TASK_REQ_SHUTDOWN) { rxtx_set_state(rxtx, RXTX_STATE_SHUTDOWN); } else { rxtx_set_state(rxtx, RXTX_STATE_IDLE); } status = bladerf_enable_module(dev, rxtx->module, false); if (status < 0) { set_last_error(&rxtx->last_error, ETYPE_BLADERF, status); } *requests = 0; rxtx_release_wait(rxtx); }
static inline void ctrlc_handler_common(int signal) { bool waiting = false; if (signal == SIGINT || signal == SIGTERM) { if (cli_state) { /* Unblock any rx/tx "wait" commands */ waiting = rxtx_release_wait(cli_state->rx); waiting |= rxtx_release_wait(cli_state->tx); } if (!waiting) { /* Let out interactive support know we got a ctrl-C if we weren't just * waiting on an rx/tx wait command */ interactive_ctrlc(); } } }
void rxtx_task_exec_stop(struct rxtx_data *rxtx, unsigned char *requests) { *requests = rxtx_get_requests(rxtx, RXTX_TASK_REQ_STOP | RXTX_TASK_REQ_SHUTDOWN); MUTEX_LOCK(&rxtx->file_mgmt.file_lock); if (rxtx->file_mgmt.file != NULL) { fclose(rxtx->file_mgmt.file); rxtx->file_mgmt.file = NULL; } MUTEX_UNLOCK(&rxtx->file_mgmt.file_lock); if (*requests & RXTX_TASK_REQ_SHUTDOWN) { rxtx_set_state(rxtx, RXTX_STATE_SHUTDOWN); } else { rxtx_set_state(rxtx, RXTX_STATE_IDLE); } *requests = 0; rxtx_release_wait(rxtx); }