libpomelo进入后台+飞行模式后,恢复app有很大概率崩溃

在心跳部分的代码,打LOG发现pcheartbeat_cb和pcheartbeat_req_cb的输入参数不太对~
一开始正常心跳时
pcheartbeat_cb 6174996096 0
pc
heartbeat_req_cb 6175264416 0
pcheartbeat_cb 6174996096 0
pc
heartbeat_req_cb 6175258976 0

等进入后台再出来
pcheartbeat_cb 6174999040 0
pc
heartbeat_req_cb 6175264736 -1

标签: libpomelo
qklxtlx 在 2014-10-10 13:22发布 分享到 weibo
6 回复
#1 qklxtlx 2014-10-10 13:25 回复

我是这么打印的:
printf("pcheartbeat_cb %ld %d\n", heartbeat_timer, status);
printf("pc
heartbeat_req_cb %ld %d\n", req, status);

uv_last_error返回的是0

#2 {1} fantasyni 2014-10-10 15:23 回复

恩,我们会跟进这个问题的哦

qklxtlx 2014-10-10 15:38 回复

嗯嗯,辛苦了~

大概复现过程是:
连上pomelo,随便发送几个消息试试~然后进入飞行模式,然后进入后台。挂几分钟~从后台恢复就挂了……

#3 {1} wangxy 2014-10-10 17:37 回复

@qklxtlx libpomelo的版本? 以及退出时收到的的信号? 最好能把加载的core文件的前面一部分贴一下.

qklxtlx 2014-10-10 18:24 回复

版本号在哪里看的?我记得是最近几个月的libpomelo,但是找不到具体的了
退出是因为assert(0)这句话挂了,这里注释掉之后EXEC_BADACCESS

我一会儿更新下最新的libpomelo试试再

#4 qklxtlx 2014-10-11 10:23 回复

@wangxy 最新版本的libpomelo

> Thread 7#0 0x3546ddfc in pthread_kill () 1 0x354edd12 in
> pthread_kill () 2 0x3540d938 in abort () 3 0x353ed42c in assert_rtn ()
> 4 0x00107686 in uv_err_name at
> /Users/anthony/SDK/sgtrack_sdk/Library/libpomelo/deps/uv/src/uv-common.c:102
> 5 0x0010430a in pcheartbeat_req_cb at
> /Users/anthony/SDK/sgtrack_sdk/Library/libpomelo/src/pkg-heartbeat.c:84
> 6 0x0010cd26 in uvwrite_callbacks at
> /Users/anthony/SDK/sgtrack_sdk/Library/libpomelo/deps/uv/src/unix/stream.c:891
> 7 0x0010abf2 in uvstream_io at
> /Users/anthony/SDK/sgtrack_sdk/Library/libpomelo/deps/uv/src/unix/stream.c:1130
> 8 0x001082ee in uvrun_pending at
> /Users/anthony/SDK/sgtrack_sdk/Library/libpomelo/deps/uv/src/unix/core.c:580
> 9 0x0010819e in uv_run at
> /Users/anthony/SDK/sgtrack_sdk/Library/libpomelo/deps/uv/src/unix/core.c:311
> 10 0x000fec22 in pc_run at
> /Users/anthony/SDK/sgtrack_sdk/Library/libpomelo/src/client.c:577 11
> 0x00107036 in pcworker at
> /Users/anthony/SDK/sgtrack_sdk/Library/libpomelo/src/thread.c:35 12
> 0x0010785e in uv
thread_start at
> /Users/anthony/SDK/sgtrack_sdk/Library/libpomelo/deps/uv/src/uv-common.c:322
> 13 0x354ece66 in _pthread_body () 14 0x354ecdda in _pthread_start ()

enter image description here

#5 {5} wangxy 2014-10-11 12:47 回复

@qklxtlx 你在pkg-heartbeat.c:84 处做一下修改,别使用uv_err_name了,把uv_last_error的返回值打印出来看看值是多少. 基本上感觉是libuv的bug,但是不太确定。

目前libuv最新版是1.0-rc了, libpomelo使用的libuv是0.10.27,而且不打算升级了,建议直接切到libpomelo2好了

qklxtlx 2014-10-11 13:32 回复

uv_last_error返回值是0~而且就算这里注释掉,后面做pc_destroy的时候也会崩

主贴里我其实做了一部分debug,发现pc__heartbeat_req_cb返回的指针都不对了。。。

qklxtlx 2014-10-11 14:13 回复

你可以在libpomelo上复现么?这个和逻辑代码无关

wangxy 2014-10-11 14:16 回复

@qklxtlx 有没有开启libpomelo的自动重连?

wangxy 2014-10-11 14:21 回复

@qklxtlx 这里没有相应的场景

qklxtlx 2014-10-11 16:44 回复

@wangxy 默认的enable_reconnect打开了~

#6 {1} herofj1986 2015-1-9 19:30 回复

我们项目也遇到这个问题,因为项目已经到后期不打算升级到libpomelo2了,这个bug是libpomelo强转指针错误 pc__heartbeat_req_cb 函数里面

pc_client_t *client = (pc_client_t *)data[0]; 修改为

pc_transport_t *transport = (pc_transport_t *)data[0];
pc_client_t *client = transport->client;

qklxtlx 2015-1-10 14:00 回复

非常感谢!我们目前已转Libpomelo2 我查查有没有类似问题

回到顶部