Re: [问题] 如何定位NDK Block issue

楼主: windows2k (程式宅 <囧>)   2018-10-21 09:00:00
※ 引述《windows2k (程式宅 <囧>)》之铭言:
: 推 yvb: 是否有可以 reproduce 的 sample code ? 10/20 22:02
程式码在 Libuv中
我只列出我需要的程式码
在 src/unix/linux-core中的
void uv__io_poll(uv_loop_t* loop, int timeout) {
nfds = epoll_pwait(loop->backend_fd,
events,
ARRAY_SIZE(events),
timeout,
psigset);
if (pe->events != 0) {
w->cb(loop, w, pe->events); // 这边已经确定 epoll_wait吐出 POLLIN
}
}
然后callback长这个样子
src/unix/stream.c
void uv__server_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) {
while (uv__stream_fd(stream) != -1) {
err = uv__accept(uv__stream_fd(stream));
// 我在底下加Log, 结果没印出来, 所以怀疑是在uv_accept的地方出错
}
}
uv__accept的实作在
src/unix/core.c
int uv__accept(int sockfd) {
int peerfd;
int err;
while (1) {
static int no_accept4;
if (no_accept4)
goto skip;
peerfd = uv__accept4(sockfd,
NULL,
NULL,
UV__SOCK_NONBLOCK|UV__SOCK_CLOEXEC);
skip:
peerfd = accept(sockfd, NULL, NULL);
// 不管是 accept4或是accpt都会block住
}
: → yvb: 以及是否使用 strace 追踪 syscall 的情况了呢? 10/20 22:03
Android应该不能用strace吧..
不过有一点很奇怪, 我是在执行到一半的时候Wifi关闭, 然后就做出来了
不过看了一下Linux Kernel的Code...应该不会影响才是
作者: yvb   2018-10-23 19:03:00
请 google: android strace另外, kill -3 pid 或 kill -11 pid, 也许就能用 ndk-stack ?

Links booklink

Contact Us: admin [ a t ] ucptt.com