Fw: [問題] 如何定位NDK Block issue

看板LinuxDev作者 (程式宅 <囧>)時間6年前 (2018/10/20 12:07), 編輯推噓1(101)
留言2則, 1人參與, 6年前最新討論串1/2 (看更多)
※ [本文轉錄自 AndroidDev 看板 #1Rog49g9 ] 作者: windows2k (程式宅 <囧>) 看板: AndroidDev 標題: [問題] 如何定位NDK Block issue 時間: Sat Oct 20 11:29:10 2018 這問題有點難描述...不是Crash, 所以不能用ndk-stack下去看 而是Native code的程式碼被Blocked住了 同樣的程式碼, 在Android 6之前都運行正常, 在Android 7之後就出現了 由於是Linux based, Linux 我試不出來此Bug 程式碼邏輯大概是這樣 開一個 listen socket -> 設成 NonBlocking Mode epoll -> 得到一個 Read Event -> Accept new socket 程式碼來自於知名Network Library, 我想錯誤的機率不大 經過夾擊之後, 我發現問題可能出在 Accept new socket這部分 Accept前後程式碼沒有System call, 並且沒有Blocking的可能 根據 Linux Manual 上所寫 If no pending connections are present on the queue, and the socket is not marked as nonblocking, accept() blocks the caller until a connection is present. If the socket is marked nonblocking and no pending connections are present on the queue, accept() fails with the error EAGAIN or EWOULDBLOCK. 理論上根本不會有問題... 於是作了以下嘗試 1. 在Accept之前再次將 Socket 設成 non-blocking => 沒用 2. 在Accept前後加上 __android_log_print 做夾擊 => 做不出來, 但不是我想要的解法 我的問題主要有兩個 1. 如何證明 accept 會卡住 2. 如何避開這個問題 卡關了很久, 希望有人給我一點想法吧, 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.32.87.63 ※ 文章網址: https://www.ptt.cc/bbs/AndroidDev/M.1540006153.A.A89.html ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: windows2k (114.32.87.63), 10/20/2018 12:06:59

10/20 22:02, 6年前 , 1F
是否有可以 reproduce 的 sample code ?
10/20 22:02, 1F

10/20 22:03, 6年前 , 2F
以及是否使用 strace 追踪 syscall 的情況了呢?
10/20 22:03, 2F
文章代碼(AID): #1Rogdav8 (LinuxDev)
文章代碼(AID): #1Rogdav8 (LinuxDev)