workqueue中调用rt_i2c_transfer互斥锁线程bug

发布于 2020-09-04 10:02:28    浏览:373

不知道什么原因,现象是这样。

  rt_work_init(&work, cmd_exc, tmp_msg); //初始化work,绑定回调函数。

    rt_kprintf("dowork tick : %ld\n", rt_tick_get());
    res = rt_workqueue_dowork(wq, &work); 

在回调函数 cmd exc 中执行了rt_i2c_transfer debug 跟踪到 ,

        rt_mutex_take(&bus->lock, RT_WAITING_FOREVER);
        ret = bus->ops->master_xfer(bus, msgs, num);
        rt_mutex_release(&bus->lock);

在这个过程中 ,lock 的 owner 线程 被非法修改了值
(struct rt_thread*) ,type 和 name 等都变成非法

查看更多

1 个回答
aozima
aozima 2020-09-04
拒绝白嫖,拒绝键盘侠!

下个写断点看看

撰写答案

请登录后再发布答案,点击登录
关注者
0
被浏览
373

发布
问题

分享
好友

手机
浏览

扫码手机浏览