PJSIP v2.3.0을 사용하는 iOS VOIP 앱이 있습니다.PJSIP : iOS 앱을 백그라운드로 이동 한 다음 foreground로 이동할 때 pj_sockaddr_get_port에서 오류가 발생합니다.
iOS 11 출시 이후, 나는 아래에서 많은 충돌 사례를보고 있습니다. 내 응용 프로그램과 통합 된 패브릭 (crashlytics) 있고이 추락 스레드의 backtrace입니다.
PJ_ASSERT_RETURN(a->addr.sa_family == PJ_AF_INET ||
a->addr.sa_family == PJ_AF_INET6, (pj_uint16_t)0xFFFF);
pj_sockaddr_get_port
에 의한 주장에Crashed: Thread
0 libsystem_kernel.dylib 0x186819348 __pthread_kill + 8
1 libsystem_pthread.dylib 0x18692d354 pthread_kill$VARIANT$mp + 396
2 libsystem_c.dylib 0x186788fd8 abort + 140
3 libsystem_c.dylib 0x18675cabc basename_r + 314
4 MyApp 0x101a2ab58 pj_sockaddr_get_port + 10115892
5 MyApp 0x101a24e28 udp_on_read_complete + 10092036
6 MyApp 0x1019bba74 ioqueue_dispatch_read_event + 9661008
7 MyApp 0x1019bd1f0 pj_ioqueue_poll + 9667020
8 MyApp 0x101a08788 pjsip_endpt_handle_events2 + 9975652
9 MyApp 0x1019df334 worker_thread + 9806608
10 MyApp 0x1019cf274 thread_main + 9740880
11 libsystem_pthread.dylib 0x18692c32c _pthread_body + 308
12 libsystem_pthread.dylib 0x18692c1f8 _pthread_body + 310
13 libsystem_pthread.dylib 0x18692ac38 thread_start + 4
스레드 충돌 주 : PJ_ASSERT_RETURN 단순히 여기 PJ_ASSERT되도록 PJ_ENABLE_EXTRA_CHECK 내 응용 프로그램에 대해 0을 정의한다.
이 충돌까지 이어지는 PJSIP 로그는 흥미로운 것을 알려줍니다. 앱에 배경이 설정되고 등록이 취소됩니다. 몇 분 후 앱이 포 그라운드로 이동하면 등록을 시도합니다.
다음 경고 메시지가 표시되는 동시에 crashlytics가 역 추적으로 위에서 언급 한 크래시를보고했습니다.
2017-09-28 21:00:11 TID=50691 [pjsua] Log Level-1 : 16:00:11.267 ioq_select Error replacing socket: Invalid argument
2017-09-28 21:00:11 TID=50691 [pjsua] Log Level-1 : 16:00:11.267 udp0x10de7f3a0 Warning: pj_ioqueue_recvfrom: [err 120009] Bad file descriptor
2017-09-28 21:00:11 TID=50691 [pjsua] Log Level-1 : 16:00:11.267 udp0x10de7f3a0 Warning: pj_ioqueue_recvfrom: [err 120009] Bad file descriptor
.
.
.
2017-09-28 21:00:18 TID=50691 [pjsua] Log Level-1 : 16:00:15.256 udp0x10de7f3a0 Warning: pj_ioqueue_recvfrom: [err 120057] Socket is not connected
2017-09-28 21:00:18 TID=50691 [pjsua] Log Level-1 : 16:00:15.256 udp0x10de7f3a0 Warning: pj_ioqueue_recvfrom: [err 120057] Socket is not connected
2017-09-28 21:00:18 TID=50691 [pjsua] Log Level-1 : 16:00:15.256 udp0x10de7f3a0 Warning: pj_ioqueue_recvfrom: [err 120057] Socket is not connected
.
.
.
2017-09-28 21:00:18 TID=50691 [pjsua] Log Level-1 : 16:00:18.262 udp0x10de7f3a0 Warning: pj_ioqueue_recvfrom: [err 120038] Socket operation on non-socket
2017-09-28 21:00:18 TID=50691 [pjsua] Log Level-1 : 16:00:18.262 udp0x10de7f3a0 Warning: pj_ioqueue_recvfrom: [err 120038] Socket operation on non-socket
2017-09-28 21:00:18 TID=50691 [pjsua] Log Level-1 : 16:00:18.262 udp0x10de7f3a0 Warning: pj_ioqueue_recvfrom: [err 120038] Socket operation on non-socket
이 경고 메시지 때문에 내가 이해에서 udp_on_read_complete 내부 루프를 회전으로 나타납니다. iOS가 pjsip이 사용하려고하는 소켓을 다시 주장 할 수 있습니까?
아무도이 충돌을 발견하지 못 했습니까? 모든 종류의 포인터/가이드를 환영합니다.
비슷한 문제가 발생했습니다. 이 문제를 해결하는 데 성공 했습니까? – MegaManX
현재 테스트중인 pjsip에서이 문제의 해결 방법이 있습니다. 일단 긍정적 인 결과를 얻으면 수정 사항을 알려 드리겠습니다. 감사합니다. . – adsun
'applicationDidEnterBackground :'와'applicationWillEnterForeground :'를 다루는 방법은 무엇입니까? 코드를 제공해야합니다. –