Race in WapPushManager under multi-thread environment
When multiple threads call WapPushManager functions simultaneously,
it might hit race that one thread is closing a SqliteDatabase object
while another thread is using it.
Following is an example:
Thread A Thread B
call getDatabaseLocked() ---
| |
mDatabase is NULL,so A create Database ---
| |
getDatabaseLocked() return the new ---
created Database ---
| |
--- call getDatabaseLocked() and return
--- the Database created by A
| |
Call SQLiteDatabase.close() ---
close() -> releaseReference() ---
the reference count is decreased to 0 ---
| |
--- Attempt to call any operation of Database
--- Object, but hit exception because this
--- Database Object's reference count is 0
For WapPushManager, seems it always close the database object right after
it open&query it, this is not necessary and would hit above race under multi-thread
environment.
Ticket: CYNGNOS-2973
Change-Id: I68fac046f806c8d9328fbe0d9c8a08e6bfddbef1
Signed-off-by:
wangbo3 <bo.c.wang@intel.com>
Signed-off-by:
chao.bi <chao.bi@intel.com>
Signed-off-by:
Zhiquan Liu <zhiquan.liu@intel.com>
Loading
Please register or sign in to comment