免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2339 | 回复: 3
打印 上一主题 下一主题

[其他] 及其怀疑 iphone 5 的cpu 有 bug [复制链接]

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-12-30 19:36 |只看该作者 |倒序浏览
虽然看上去更像一个推卸责任的想法, 但现在所有的现象都没办法解释
怎么搞?

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:45
2 [报告]
发表于 2014-12-30 21:20 |只看该作者
肯定内存错误,想都不用想

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
3 [报告]
发表于 2014-12-30 21:47 |只看该作者
本帖最后由 zylthinking 于 2014-12-30 21:50 编辑

嗯, 问题是没办法解释.............
push 只有一个调用方, mbuf 是调用方 malloc 出来的, 而后通过 push 挂到链表上

static int push(void* any, char* buf, unsigned int length)
{
    struct capture_context* ctx = (struct capture_context *) any;
    if (buf == NULL) {
        return 0;
    }
    struct my_buffer* mbuf = (struct my_buffer *) buf;

    media_buffer* media = (media_buffer *) mbuf->ptr[0];
    if (ctx->bytes_per_ms.num == 0) {
        audio_format* fmt = to_audio_format(media->pptr_cc);
        ctx->align = fmt->pcm->sambits / 8;
        ctx->bytes_per_ms = pcm_bytes_from_ms(fmt->pcm, 1);
    }

    lock(&ctx->lck);
    if (ctx->ref == 2) {
        list_add_tail(&mbuf->head, &ctx->head);
    } else {
        mbuf->mop->free(mbuf);
    }
    unlock(&ctx->lck);

    return 0;
}回复 2# koolcoy



static int input_read(void* any, struct list_head* headp, const fraction* f)
{
    struct capture_context* ctx = (struct capture_context *) any;
    if (ctx->bytes_per_ms.num == 0) {
        return 0;
    }

    uint32_t bytes = f->num;
    if (bytes != (uint32_t) -1) {
        bytes = (ctx->bytes_per_ms.num  * f->num) / (ctx->bytes_per_ms.den * f->den);
        bytes = roundup(bytes, ctx->align);
    }
    int32_t readed = 0;

    lock(&ctx->lck);
    while (!list_empty(&ctx->head)) {
        struct list_head* ent = ctx->head.next;
        list_del(ent); -------------------------------> 现象是 list_del 居然没有起作用, 导致 ent 仍然在 链表里挂着

        logmsg("%p<----%p---->%p\n", ent->prev, ent, ent->next);
        print_list(&ctx->head, "1: ");

        struct my_buffer* mbuf = list_entry(ent, struct my_buffer, head);
        if (__builtin_expect(mbuf->length <= bytes, 1)) {
            logmsg("encode %d bytes\n", mbuf->length);
            bytes -= mbuf->length;
            readed += encode(ctx, mbuf, headp);  --------------------> mbuf 在这里会被 free 掉, 由于 list_del 没有起作用, 导致了 free 了 两次
            logmsg("readed = %d\n", readed);

            if (bytes == 0) {
                break;
            }
            continue;
        }
        unlock(&ctx->lck);

        struct my_buffer* mbuf2 = mbuf->mop->clone(mbuf);  -------------> 这里可以肯定不会走到,  日志输出也显示没有走到这里,
        if (mbuf2 != NULL) {
            mbuf2->length = bytes;
            readed += encode(ctx, mbuf2, headp);
        }

        uint32_t ms = (bytes * ctx->bytes_per_ms.den) / ctx->bytes_per_ms.num;
        media_buffer* media = (media_buffer *) mbuf->ptr[0];
        media->pts += ms;
        mbuf->length -= bytes;
        mbuf->ptr[1] += bytes;

        lock(&ctx->lck);
        if (ctx->ref == 2) {
            list_add(ent, &ctx->head);
        } else {
            mbuf->mop->free(mbuf);
        }
        break;
    }

    if (f->num == (uint32_t) -1) {
        readed += encode(ctx, NULL, headp);
    }
    unlock(&ctx->lck);
    return (int) readed;
}

   

论坛徽章:
36
CU大牛徽章
日期:2013-09-18 15:24:20NBA常规赛纪念章
日期:2015-05-04 22:32:03牛市纪念徽章
日期:2015-07-24 12:48:5515-16赛季CBA联赛之辽宁
日期:2016-03-30 09:26:4715-16赛季CBA联赛之北控
日期:2016-03-30 11:26:2315-16赛季CBA联赛之广夏
日期:2016-05-20 15:46:5715-16赛季CBA联赛之吉林
日期:2016-05-24 11:38:0615-16赛季CBA联赛之青岛
日期:2016-05-30 13:41:3215-16赛季CBA联赛之同曦
日期:2016-06-23 16:41:052015年亚洲杯之巴林
日期:2015-02-03 15:05:04CU大牛徽章
日期:2013-09-18 15:24:52CU十二周年纪念徽章
日期:2013-10-24 15:46:53
4 [报告]
发表于 2015-01-04 17:17 |只看该作者
list_del(ent); -------------------------------> 现象是 list_del 居然没有起作用, 导致 ent 仍然在 链表里挂着

这不起作用不是参数不对那这函数本身就有问题吧,list_del 100%正确吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP