From: drh Date: Tue, 27 Apr 2010 11:49:27 +0000 (+0000) Subject: Add the xShmRelease() method to the VFS. The os_unix.c implementation of X-Git-Tag: version-3.7.2~455^2~44^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=af75c8695bd53883e57affaf6eac7c50743d4f2a;p=thirdparty%2Fsqlite.git Add the xShmRelease() method to the VFS. The os_unix.c implementation of the shared memory logic is still non-functional. FossilOrigin-Name: ed715b47c5f7657fbf901805981867898054b14d --- diff --git a/manifest b/manifest index d9cabb3bc1..68088c71ab 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,8 @@ -C Run\strans.test\sand\savtrans.test\sas\spart\sof\sthe\s"wal"\spermutation. -D 2010-04-27T06:49:34 +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +C Add\sthe\sxShmRelease()\smethod\sto\sthe\sVFS.\s\sThe\sos_unix.c\simplementation\sof\nthe\sshared\smemory\slogic\sis\sstill\snon-functional. +D 2010-04-27T11:49:27 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in d83a0ffef3dcbfb08b410a6c6dd6c009ec9167fb F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -149,9 +152,9 @@ F src/notify.c cbfa66a836da3a51567209636e6a94059c137930 F src/os.c 8bc63cf91e9802e2b807198e54e50227fa889306 F src/os.h 534b082c3cb349ad05fa6fa0b06087e022af282c F src/os_common.h 240c88b163b02c21a9f21f87d49678a0aa21ff30 -F src/os_os2.c 082884dc2a20a2f1fddc404f3606ec2abe907b56 -F src/os_unix.c 1acc854259b045cf029c6f95828a5f4b84f361c7 -F src/os_win.c 607b40e40662c6c74ff2400ff03e7f42521d5c75 +F src/os_os2.c 8ad77a418630d7dee91d1bb04f79c2096301d3a0 +F src/os_unix.c 332ff9185aedcbd25568a06ddbdb51f5496b9756 +F src/os_win.c a8fc01d8483be472e495793c01064fd87e56a5c1 F src/pager.c b4a41030860229e80295fa1f37addab24d21799c F src/pager.h cee4487ab4f0911dd9f22a40e3cd55afdb7ef444 F src/parse.y ace5c7a125d9f2a410e431ee3209034105045f7e @@ -166,7 +169,7 @@ F src/resolve.c ac5f1a713cd1ae77f08b83cc69581e11bf5ae6f9 F src/rowset.c 69afa95a97c524ba6faf3805e717b5b7ae85a697 F src/select.c c03d8a0565febcde8c6a12c5d77d065fddae889b F src/shell.c c40427c7245535a04a9cb4a417b6cc05c022e6a4 -F src/sqlite.h.in 96b0bed7825da354119a9742a83033087c537133 +F src/sqlite.h.in f9399ee58862fd146eff9725dda83b5c82d04a93 F src/sqlite3ext.h 69dfb8116af51b84a029cddb3b35062354270c89 F src/sqliteInt.h 700a2df7b8dfe57c3b8d83c52ff40928e026220c F src/sqliteLimit.h 3afab2291762b5d09ae20c18feb8e9fa935a60a6 @@ -178,7 +181,7 @@ F src/test2.c b6b43413d495addd039a88b87d65c839f86b18cb F src/test3.c 4c21700c73a890a47fc685c1097bfb661346ac94 F src/test4.c ad03bb987ddedce928f4258c1e7fa4109a73497d F src/test5.c cc55900118fa4add8ec9cf69fc4225a4662f76b1 -F src/test6.c d23fc84954751735bcb1050d4606b00952eb7809 +F src/test6.c 49b39daf8e88ed6baab25c524ca5635304f6f315 F src/test7.c 3f2d63e4ccf97f8c2cf1a7fa0a3c8e2e2a354e6e F src/test8.c f959db9a22d882013b64c92753fa793b2ce3bdea F src/test9.c bea1e8cf52aa93695487badedd6e1886c321ea60 @@ -187,19 +190,19 @@ F src/test_autoext.c 30e7bd98ab6d70a62bb9ba572e4c7df347fe645e F src/test_backup.c c129c91127e9b46e335715ae2e75756e25ba27de F src/test_btree.c 47cd771250f09cdc6e12dda5bc71bc0b3abc96e2 F src/test_config.c 8c408fbffbe8082d1d3dc55044ddfd5580f3c9b9 -F src/test_demovfs.c 68f8e6cfd6b337612e26b7027f97bf7ea02d4e04 -F src/test_devsym.c 76f47435769168fb665828f5cc24a4a0a130c302 +F src/test_demovfs.c da81a5f7785bb352bda7911c332a983ec4f17f27 +F src/test_devsym.c 361d069bf74d4044bf53eb29dc0fa3709ed98baf F src/test_func.c 13b582345fb1185a93e46c53310fae8547dcce20 F src/test_hexio.c 1237f000ec7a491009b1233f5c626ea71bce1ea2 F src/test_init.c 5d624ffd0409d424cf9adbfe1f056b200270077c F src/test_intarray.c d879bbf8e4ce085ab966d1f3c896a7c8b4f5fc99 F src/test_intarray.h 489edb9068bb926583445cb02589344961054207 -F src/test_journal.c 6f2db1b847929791242e32323721c48c7d2d6e0c +F src/test_journal.c 0537fcf9d4ecb394ec8b27d887a004ecaab85f16 F src/test_loadext.c df586c27176e3c2cb2e099c78da67bf14379a56e F src/test_malloc.c 2842c922b8e8d992aba722214952204ca025b411 F src/test_mutex.c ce06b59aca168cd8c520b77159a24352a7469bd3 F src/test_onefile.c 1d098e7446d89087def7d20e0cdb77a0713ed1bf -F src/test_osinst.c 79a9b9fdb87fccd7fdc2f523bfbb91f964bafa68 +F src/test_osinst.c f5d1a4ee8b80fc58d1430c56146de748584013a9 F src/test_pcache.c 7bf828972ac0d2403f5cfa4cd14da41f8ebe73d8 F src/test_schema.c 8c06ef9ddb240c7a0fcd31bc221a6a2aade58bf0 F src/test_server.c bbba05c144b5fc4b52ff650a4328027b3fa5fcc6 @@ -808,7 +811,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P b51a5f8bc660616aa264025dd7ad4bdab458814b -R 25f06e3e98c7ea6b1eb255e6fd74be59 -U dan -Z 9cceaabbad6baa9da4fc7d1b5b1a7fe5 +P c8893310510148f7e71ede5691606b6fc1c3df4d +R fb13be4dd0d753be93180ef3cbf1d215 +U drh +Z 6f72fe2227e763bb3a1c4d06bd5a901c +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.4.6 (GNU/Linux) + +iD8DBQFL1s9KoxKgR168RlERAqqPAJ0SGEtAEImz4CyMiguEDpkB2AslLQCfd9o1 +tWw2lhvU6jis7pTQTOVY1gE= +=4LgW +-----END PGP SIGNATURE----- diff --git a/manifest.uuid b/manifest.uuid index dc61bc6fbd..2c39d62be3 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c8893310510148f7e71ede5691606b6fc1c3df4d \ No newline at end of file +ed715b47c5f7657fbf901805981867898054b14d \ No newline at end of file diff --git a/src/os_os2.c b/src/os_os2.c index 04b6dce0e9..1c55e4be66 100644 --- a/src/os_os2.c +++ b/src/os_os2.c @@ -1111,16 +1111,7 @@ int sqlite3_os_init(void){ os2Randomness, /* xRandomness */ os2Sleep, /* xSleep */ os2CurrentTime, /* xCurrentTime */ - os2GetLastError /* xGetLastError */ - 0, /* xShmOpen */ - 0, /* xShmSize */ - 0, /* xShmPush */ - 0, /* xShmPull */ - 0, /* xShmLock */ - 0, /* xShmClose */ - 0, /* xShmDelete */ - 0, /* xRename */ - 0, /* xCurrentTimeInt64 */ + os2GetLastError, /* xGetLastError */ }; sqlite3_vfs_register(&os2Vfs, 1); initUconvObjects(); diff --git a/src/os_unix.c b/src/os_unix.c index b2cf9be76d..d603caa0d0 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -4647,8 +4647,13 @@ shm_open_err: ** Query and/or changes the size of a shared-memory segment. ** The reqSize parameter is the new size of the segment, or -1 to ** do just a query. The size of the segment after resizing is -** written into pNewSize. The start of the shared memory buffer -** is stored in **ppBuffer. +** written into pNewSize. A writer lock is held on the shared memory +** segment while resizing it. +** +** If ppBuffer is not NULL, the a reader lock is acquired no the shared +** memory segment and *ppBuffer is made to point to the start of the +** shared memory segment. xShmRelease() must be called to release the +** lock. */ static int unixShmSize( sqlite3_shm *pSharedMem, /* Pointer returned by unixShmOpen() */ @@ -4679,6 +4684,14 @@ static int unixShmSize( return rc; } +/* +** Release the lock held on the shared memory segment to that other +** threads are free to resize it if necessary. +*/ +static int unixShmRelease(sqlite3_shm *pSharedMem){ + return SQLITE_OK; +} + /* ** Create or release a lock on shared memory. */ @@ -5934,6 +5947,7 @@ int sqlite3_os_init(void){ unixGetLastError, /* xGetLastError */ \ unixShmOpen, /* xShmOpen */ \ unixShmSize, /* xShmSize */ \ + unixShmRelease, /* xShmRelease */ \ 0, /* xShmPush */ \ 0, /* xShmPull */ \ unixShmLock, /* xShmLock */ \ diff --git a/src/os_win.c b/src/os_win.c index 31c3cffce3..cfcf49e362 100644 --- a/src/os_win.c +++ b/src/os_win.c @@ -1912,16 +1912,7 @@ int sqlite3_os_init(void){ winRandomness, /* xRandomness */ winSleep, /* xSleep */ winCurrentTime, /* xCurrentTime */ - winGetLastError /* xGetLastError */ - 0, /* xShmOpen */ - 0, /* xShmSize */ - 0, /* xShmPush */ - 0, /* xShmPull */ - 0, /* xShmLock */ - 0, /* xShmClose */ - 0, /* xShmDelete */ - 0, /* xRename */ - 0, /* xCurrentTimeInt64 */ + winGetLastError, /* xGetLastError */ }; sqlite3_vfs_register(&winVfs, 1); diff --git a/src/sqlite.h.in b/src/sqlite.h.in index f673781e00..7bc7509447 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -844,7 +844,8 @@ struct sqlite3_vfs { ** definition. Those that follow are added in version 2 or later */ int (*xShmOpen)(sqlite3_vfs*, const char *zName, sqlite3_shm**); - int (*xShmSize)(sqlite3_shm*, int reqSize, int *pNewSize, char **); + int (*xShmSize)(sqlite3_shm*, int reqSize, int *pNewSize, char**); + int (*xShmRelease)(sqlite3_shm*); int (*xShmPush)(sqlite3_shm*); int (*xShmPull)(sqlite3_shm*); int (*xShmLock)(sqlite3_shm*, int lockType, int ofst, int nByte); diff --git a/src/test6.c b/src/test6.c index a6e9954517..3da9502fd7 100644 --- a/src/test6.c +++ b/src/test6.c @@ -782,15 +782,6 @@ static int crashEnableCmd( cfRandomness, /* xRandomness */ cfSleep, /* xSleep */ cfCurrentTime, /* xCurrentTime */ - 0, /* xShmOpen */ - 0, /* xShmSize */ - 0, /* xShmPush */ - 0, /* xShmPull */ - 0, /* xShmLock */ - 0, /* xShmClose */ - 0, /* xShmDelete */ - 0, /* xRename */ - 0 /* xCurrentTimeInt64 */ }; if( objc!=2 ){ diff --git a/src/test_demovfs.c b/src/test_demovfs.c index d91a389dbb..7cdae80670 100644 --- a/src/test_demovfs.c +++ b/src/test_demovfs.c @@ -624,15 +624,6 @@ sqlite3_vfs *sqlite3_demovfs(void){ demoRandomness, /* xRandomness */ demoSleep, /* xSleep */ demoCurrentTime, /* xCurrentTime */ - 0, /* xShmOpen */ - 0, /* xShmSize */ - 0, /* xShmPush */ - 0, /* xShmPull */ - 0, /* xShmLock */ - 0, /* xShmClose */ - 0, /* xShmDelete */ - 0, /* xRename */ - 0 /* xCurrentTimeInt64 */ }; return &demovfs; } diff --git a/src/test_devsym.c b/src/test_devsym.c index 4249573aa1..9f71538044 100644 --- a/src/test_devsym.c +++ b/src/test_devsym.c @@ -93,15 +93,6 @@ static sqlite3_vfs devsym_vfs = { devsymRandomness, /* xRandomness */ devsymSleep, /* xSleep */ devsymCurrentTime, /* xCurrentTime */ - 0, /* xShmOpen */ - 0, /* xShmSize */ - 0, /* xShmPush */ - 0, /* xShmPull */ - 0, /* xShmLock */ - 0, /* xShmClose */ - 0, /* xShmDelete */ - 0, /* xRename */ - 0 /* xCurrentTimeInt64 */ }; static sqlite3_io_methods devsym_io_methods = { diff --git a/src/test_journal.c b/src/test_journal.c index fcfe778d1b..020b41575d 100644 --- a/src/test_journal.c +++ b/src/test_journal.c @@ -180,15 +180,6 @@ static sqlite3_vfs jt_vfs = { jtRandomness, /* xRandomness */ jtSleep, /* xSleep */ jtCurrentTime, /* xCurrentTime */ - 0, /* xShmOpen */ - 0, /* xShmSize */ - 0, /* xShmPush */ - 0, /* xShmPull */ - 0, /* xShmLock */ - 0, /* xShmClose */ - 0, /* xShmDelete */ - 0, /* xRename */ - 0 /* xCurrentTimeInt64 */ }; static sqlite3_io_methods jt_io_methods = { diff --git a/src/test_osinst.c b/src/test_osinst.c index c6d16aa67b..365da38d86 100644 --- a/src/test_osinst.c +++ b/src/test_osinst.c @@ -204,15 +204,6 @@ static sqlite3_vfs inst_vfs = { instRandomness, /* xRandomness */ instSleep, /* xSleep */ instCurrentTime, /* xCurrentTime */ - 0, /* xShmOpen */ - 0, /* xShmSize */ - 0, /* xShmPush */ - 0, /* xShmPull */ - 0, /* xShmLock */ - 0, /* xShmClose */ - 0, /* xShmDelete */ - 0, /* xRename */ - 0 /* xCurrentTimeInt64 */ }; static sqlite3_io_methods inst_io_methods = {