mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
local copy of btc_msg_t
No need to use local copy of btc_msg_t in btc_transfer_context, create it on heap and pass to osi_thread_post().
This commit is contained in:
parent
7c0f5e658e
commit
71c8b2ba80
@ -195,16 +195,7 @@ static void btc_thread_handler(void *arg)
|
|||||||
|
|
||||||
static bt_status_t btc_task_post(btc_msg_t *msg, uint32_t timeout)
|
static bt_status_t btc_task_post(btc_msg_t *msg, uint32_t timeout)
|
||||||
{
|
{
|
||||||
btc_msg_t *lmsg;
|
if (osi_thread_post(btc_thread, btc_thread_handler, msg, 0, timeout) == false) {
|
||||||
|
|
||||||
lmsg = (btc_msg_t *)osi_malloc(sizeof(btc_msg_t));
|
|
||||||
if (lmsg == NULL) {
|
|
||||||
return BT_STATUS_NOMEM;
|
|
||||||
}
|
|
||||||
|
|
||||||
memcpy(lmsg, msg, sizeof(btc_msg_t));
|
|
||||||
|
|
||||||
if (osi_thread_post(btc_thread, btc_thread_handler, lmsg, 0, timeout) == false) {
|
|
||||||
return BT_STATUS_BUSY;
|
return BT_STATUS_BUSY;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -222,7 +213,7 @@ static bt_status_t btc_task_post(btc_msg_t *msg, uint32_t timeout)
|
|||||||
*/
|
*/
|
||||||
bt_status_t btc_transfer_context(btc_msg_t *msg, void *arg, int arg_len, btc_arg_deep_copy_t copy_func)
|
bt_status_t btc_transfer_context(btc_msg_t *msg, void *arg, int arg_len, btc_arg_deep_copy_t copy_func)
|
||||||
{
|
{
|
||||||
btc_msg_t lmsg;
|
btc_msg_t* lmsg;
|
||||||
|
|
||||||
if (msg == NULL) {
|
if (msg == NULL) {
|
||||||
return BT_STATUS_PARM_INVALID;
|
return BT_STATUS_PARM_INVALID;
|
||||||
@ -230,22 +221,28 @@ bt_status_t btc_transfer_context(btc_msg_t *msg, void *arg, int arg_len, btc_arg
|
|||||||
|
|
||||||
BTC_TRACE_DEBUG("%s msg %u %u %u %p\n", __func__, msg->sig, msg->pid, msg->act, arg);
|
BTC_TRACE_DEBUG("%s msg %u %u %u %p\n", __func__, msg->sig, msg->pid, msg->act, arg);
|
||||||
|
|
||||||
memcpy(&lmsg, msg, sizeof(btc_msg_t));
|
lmsg = (btc_msg_t *)osi_malloc(sizeof(btc_msg_t));
|
||||||
if (arg) {
|
if (lmsg == NULL) {
|
||||||
lmsg.arg = (void *)osi_malloc(arg_len);
|
return BT_STATUS_NOMEM;
|
||||||
if (lmsg.arg == NULL) {
|
|
||||||
return BT_STATUS_NOMEM;
|
|
||||||
}
|
|
||||||
memset(lmsg.arg, 0x00, arg_len); //important, avoid arg which have no length
|
|
||||||
memcpy(lmsg.arg, arg, arg_len);
|
|
||||||
if (copy_func) {
|
|
||||||
copy_func(&lmsg, lmsg.arg, arg);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
lmsg.arg = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return btc_task_post(&lmsg, OSI_THREAD_MAX_TIMEOUT);
|
memcpy(lmsg, msg, sizeof(btc_msg_t));
|
||||||
|
if (arg) {
|
||||||
|
lmsg->arg = (void *)osi_malloc(arg_len);
|
||||||
|
if (lmsg->arg == NULL) {
|
||||||
|
free(lmsg);
|
||||||
|
return BT_STATUS_NOMEM;
|
||||||
|
}
|
||||||
|
memset(lmsg->arg, 0x00, arg_len); //important, avoid arg which have no length
|
||||||
|
memcpy(lmsg->arg, arg, arg_len);
|
||||||
|
if (copy_func) {
|
||||||
|
copy_func(lmsg, lmsg->arg, arg);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
lmsg->arg = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return btc_task_post(lmsg, OSI_THREAD_MAX_TIMEOUT);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user