OSDN Git Service

reference-ril/atchannel.c: Fix time conversion
authorJinhui Li <jinhui.li@intel.com>
Thu, 24 Mar 2016 00:55:10 +0000 (08:55 +0800)
committerYu Ning <yu.ning@intel.com>
Fri, 25 Mar 2016 04:58:12 +0000 (12:58 +0800)
commit11476211584f1a82c870b9486ace8f6f8bb9fc7c
tree0bb9c99e68ff7f85ebb319779919cb35ea3e4d73
parent99b6d09fafa21ebb1b2de493eb1f7cc315449662
reference-ril/atchannel.c: Fix time conversion

setTimespecRelative() converts a relative time to an absolute time, by
adding the relative time to current system time. However, it fails to
handle the case where the nanosecond component (tv_nsec) of the
conversion result exceeds 10^9, which can cause a subsequent call to
pthread_cond_timedwait() to return EINVAL.

This bug is the root cause of the "no SIM card" error seen occasionally
on x86_64 Android emulator. In fact, all 64-bit targets use
setTimespecRelative() in conjunction with pthread_cond_timedwait()
during AT handshake, but an EINVAL return value from the latter will
lead to an infinite loop and hang the communication. With this fix,
x86_64 emulator can boot with functional 3G networking every time.

Signed-off-by: Jinhui Li <jinhui.li@intel.com>
[Revised code and commit message]
Signed-off-by: Yu Ning <yu.ning@intel.com>
Change-Id: If04ba560e350bc4e13b22c51f8d215a673230667
reference-ril/atchannel.c