From 64679fee8e866cdc342034807f47572d1e21354d Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 8 Feb 2019 20:55:16 +0000 Subject: [PATCH] Use a fast compiler-provided memory barrier exclusively, if such a memory barrier is available. FossilOrigin-Name: df66fec9bc5b8c012d2fef3e97b3f7c3850a195b417806bfddc00b88e99c97d7 --- manifest | 21 ++++++++++++--------- manifest.uuid | 2 +- src/mutex_unix.c | 1 + src/mutex_w32.c | 2 ++ src/os_unix.c | 2 ++ src/os_win.c | 2 ++ 6 files changed, 20 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index 53d85607bf..21698c4ea6 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Further\ssimplifications\sto\ssqlite3VdbeMemSetStr(). -D 2019-02-08T17:28:20.169 +C Use\sa\sfast\scompiler-provided\smemory\sbarrier\sexclusively,\sif\ssuch\sa\smemory\nbarrier\sis\savailable. +D 2019-02-08T20:55:16.378 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 178d8eb6840771149cee40b322d1b3be30d330198c522c903c1b66fb5a1bfca4 @@ -491,15 +491,15 @@ F src/msvc.h 4942752b6a253116baaa8de75256c51a459a5e81 F src/mutex.c bae36f8af32c22ad80bbf0ccebec63c252b6a2b86e4d3e42672ff287ebf4a604 F src/mutex.h 779d588e3b7756ec3ecf7d78cde1d84aba414f85 F src/mutex_noop.c 9d4309c075ba9cc7249e19412d3d62f7f94839c4 -F src/mutex_unix.c aaf9ebc3f89df28483c52208497a99a02cc3650011422fc9d4c57e4392f7fe58 -F src/mutex_w32.c 7670d770c94bbfe8289bec9d7f1394c5a00a57c37f892aab6b6612d085255235 +F src/mutex_unix.c 38abc2b703aae750e062947b75442893b02d8e124383d0e72d309e1c0d96d5e9 +F src/mutex_w32.c 761007c4382f684ebff7be2529a4926f6f2d30a178ef188d6b39ab35be5fefb4 F src/notify.c 9711a7575036f0d3040ba61bc6e217f13a9888e7 F src/os.c 8aeb0b0f40f8f5b0da03fe49706695adaf42d2f516ab95abc72e86c245e119de F src/os.h 48388821692e87da174ea198bf96b1b2d9d83be5dfc908f673ee21fafbe0d432 F src/os_common.h b2f4707a603e36811d9b1a13278bffd757857b85 F src/os_setup.h 0dbaea40a7d36bf311613d31342e0b99e2536586 -F src/os_unix.c f6e91b8fd82af7afbfd073c4974ad6cdb8e62d9f65ceddb45167835a0567fdc0 -F src/os_win.c 85d9e532d0444ab6c16d7431490c2e279e282aa0917b0e988996b1ae0de5c5a0 +F src/os_unix.c 53b42b7c8c72433f6df81a66c956ba13d9a31f1e710ffebbc9de97573480571f +F src/os_win.c 1dcd863d151c39b8f4b7eba3e2eb04366f0493fe0b54f54f64fb8115f749e895 F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a F src/pager.c 857dde3e525f665cfab23b6765bf04ca6638c0759ae7da6d63acfb463e230aa6 F src/pager.h 217921e81eb5fe455caa5cda96061959706bcdd29ddb57166198645ef7822ac3 @@ -1804,7 +1804,10 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 5c499da8a4d0babc56883aa362ae124772fd9214a51169a88a5dee523d051658 -R 9c9226b3cda6f38720edaaa5f3813b03 +P 1d212957079a2caa30f3c9d80f43464781bc9634c2b5181a5814efbddae31711 +R f9ac6bdc834b55ba32484f2ca38d078f +T *branch * faster-memory-barrier +T *sym-faster-memory-barrier * +T -sym-trunk * U drh -Z 9bc13d9b07eaf6edcfa1cadc644eb143 +Z b8a96f494889c21be4a60fd7afef3f80 diff --git a/manifest.uuid b/manifest.uuid index b06c875795..6faa7eca3f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -1d212957079a2caa30f3c9d80f43464781bc9634c2b5181a5814efbddae31711 \ No newline at end of file +df66fec9bc5b8c012d2fef3e97b3f7c3850a195b417806bfddc00b88e99c97d7 \ No newline at end of file diff --git a/src/mutex_unix.c b/src/mutex_unix.c index 9282d28016..a22bdee04d 100644 --- a/src/mutex_unix.c +++ b/src/mutex_unix.c @@ -93,6 +93,7 @@ void sqlite3MemoryBarrier(void){ SQLITE_MEMORY_BARRIER; #elif defined(__GNUC__) && GCC_VERSION>=4001000 __sync_synchronize(); +# define sqlite3MemoryBarrier_IS_RELIABLE 1 #endif } diff --git a/src/mutex_w32.c b/src/mutex_w32.c index 8a8ae289ba..7c2dd68ec2 100644 --- a/src/mutex_w32.c +++ b/src/mutex_w32.c @@ -87,8 +87,10 @@ void sqlite3MemoryBarrier(void){ SQLITE_MEMORY_BARRIER; #elif defined(__GNUC__) __sync_synchronize(); +# define sqlite3MemoryBarrier_IS_RELIABLE 1 #elif MSVC_VERSION>=1300 _ReadWriteBarrier(); +# define sqlite3MemoryBarrier_IS_RELIABLE 1 #elif defined(MemoryBarrier) MemoryBarrier(); #endif diff --git a/src/os_unix.c b/src/os_unix.c index f20763e5b0..678b1c0325 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -4893,8 +4893,10 @@ static void unixShmBarrier( assert( fd->pMethods->xLock==nolockLock || unixFileMutexNotheld((unixFile*)fd) ); +#ifndef sqlite3MemoryBarrier_IS_RELIABLE unixEnterMutex(); /* Also mutex, for redundancy */ unixLeaveMutex(); +#endif } /* diff --git a/src/os_win.c b/src/os_win.c index aafc89f7d2..4aacaa1e1f 100644 --- a/src/os_win.c +++ b/src/os_win.c @@ -4174,8 +4174,10 @@ static void winShmBarrier( ){ UNUSED_PARAMETER(fd); sqlite3MemoryBarrier(); /* compiler-defined memory barrier */ +#ifndef sqlite3MemoryBarrier_IS_RELIABLE winShmEnterMutex(); /* Also mutex, for redundancy */ winShmLeaveMutex(); +#endif } /* -- 2.39.5