Commit 799d2b5
committed
unqlite: bug fix, assgin the pEngine->pHeader when get the page one
The pEngine->pHeader is assgined at the first load of database,
unqlite_commit() will release all the pages in pager_commit_phase1(),
also the page one (header page) is released, then the header page
memory was freed, so the pEngine->pHeader point to a invalid
address. In some situations that use the pEngine->pHeader, system
crash.
This commit assgin the pEngine->pHeader every time get the page one
to solve this problem.
Release all the pages trace:
0 sched_backtrace
1 pager_release_page.isra.0
2 pager_commit_phase1
3 unqlite_commit
4 kvdb_server
Crash trace:
0 pager_shared_lock (pPager=0x0) at ../../../../external/unqlite/unqlite/unqlite.c:56873
1 unqlitePagerBegin (pPager=0x0) at ../../../../external/unqlite/unqlite/unqlite.c:56947
2 unqlitePageWrite (pMyPage=0x341c6ff0) at ../../../../external/unqlite/unqlite/unqlite.c:57584
3 unqliteKvIopageWrite (pPage=0x341c6ff0) at ../../../../external/unqlite/unqlite/unqlite.c:58071
4 0x0c239e32 in lhSplit (pRetry=<synthetic pointer>, pTarget=0x341c12d0) at ../../../../external/unqlite/unqlite/unqlite.c:51066
5 lhRecordInstall (nDataLen=6, pData=0x341b9233, nKeyLen=24, pKey=0x341b921b, nHash=1585931874, pPage=0x341c12d0)
at ../../../../external/unqlite/unqlite/unqlite.c:51109
6 lh_record_insert (is_append=0, nDataLen=6, pData=0x341b9233, nKeyLen=24, pKey=0x341b921b, pKv=0x3419a56c)
at ../../../../external/unqlite/unqlite/unqlite.c:51200
7 lh_record_insert (pKv=0x3419a56c, pKey=0x341b921b, nKeyLen=24, pData=0x341b9233, nDataLen=nDataLen@entry=6, is_append=is_append@entry=0)
at ../../../../external/unqlite/unqlite/unqlite.c:51125
8 0x0c23a57a in lhash_kv_replace (pKv=<optimized out>, pKey=<optimized out>, nKeyLen=<optimized out>, pData=<optimized out>, nDataLen=6)
at ../../../../external/unqlite/unqlite/unqlite.c:51230
9 0x0c3e78c0 in unqlite_kv_store (nDataLen=6, pData=0x341b9233, nKeyLen=24, pKey=0x341b921b, pDb=0x341c0910)
at ../../../../external/unqlite/unqlite/unqlite.c:5490
10 kvdb_set (db=db@entry=0x341b9088, key=key@entry=0x341b921b "persist.nightmode.light", key_len=key_len@entry=24, value=value@entry=0x341b9233 "night",
val_len=val_len@entry=6, force=force@entry=false) at ../../../../frameworks/utils/kvdb/server.c:132
11 0x0c3e7f54 in kvdb_client (fd=7, kv=0x341b9080) at ../../../../frameworks/utils/kvdb/server.c:596
12 kvdb_server (kv=0x341b9080) at ../../../../frameworks/utils/kvdb/server.c:699
13 kvdbd_main (argc=<optimized out>, argv=<optimized out>) at ../../../../frameworks/utils/kvdb/server.c:737
14 0x0c19143c in nxtask_startup (argv=<optimized out>, argc=<optimized out>, entrypt=<optimized out>) at ../../../libs/libc/sched/task_startup.c:70
15 nxtask_start () at ../../../sched/task/task_start.c:134
Signed-off-by: wangbowen6 <[email protected]>1 parent 9c4cd30 commit 799d2b5
1 file changed
+4
-4
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
49654 | 49654 | | |
49655 | 49655 | | |
49656 | 49656 | | |
49657 | | - | |
| 49657 | + | |
49658 | 49658 | | |
49659 | 49659 | | |
49660 | 49660 | | |
| |||
51094 | 51094 | | |
51095 | 51095 | | |
51096 | 51096 | | |
51097 | | - | |
| 51097 | + | |
51098 | 51098 | | |
51099 | 51099 | | |
51100 | 51100 | | |
| |||
51530 | 51530 | | |
51531 | 51531 | | |
51532 | 51532 | | |
51533 | | - | |
| 51533 | + | |
51534 | 51534 | | |
51535 | 51535 | | |
51536 | 51536 | | |
| |||
51552 | 51552 | | |
51553 | 51553 | | |
51554 | 51554 | | |
51555 | | - | |
| 51555 | + | |
51556 | 51556 | | |
51557 | 51557 | | |
51558 | 51558 | | |
| |||
0 commit comments