2011년 4월 26일 화요일

Thread.interrupt 시 Selector 빠져나오지 못하는 문제

문제:
Thread 안에 Selector.select 함수로 socket 작업이 있는지 기다리는 loop 가 있다. Thread 를 종료하기 위해 interrupt 함수를 호출하였고 Selector.select 함수를 빠져나오지 못했다.
안드로이드 2.2 에서는 문제 없었고 안드로이드 2.3 에서 문제가 발생했다.

해결:
1. Thread.interrupt 함수를 호출하면 Selector.select 함수가 block 되는 버그가 있다는 글을 찾았다. http://code.google.com/p/android/issues/detail?id=15388
Selector.wakeup 함수를 호출하여 Selector.select 함수를 빠져나올 수 있었다.
2. 같은 안드로이드 2.3 폰이지만 Selector.wakeup 함수로도 빠져나오지 못하는 경우가 있었다. 이 경우에는 의미없는 data 를 send 하여 Selector.select 함수를 빠져나올 수 있었다.

댓글 없음:

댓글 쓰기