Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fixed compile for MSVC; removed compiler warnings; changes for NDEBUG build; minor code tweaks. (CVS 6570) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
e98b12425ff036b36165dfd2002e0530 |
User & Date: | shane 2009-04-29 18:12:00.000 |
Context
2009-04-30
| ||
00:11 | Remove an always-true test from delete.c. Move the sqlite3OpenTable() routine from delete.c to insert.c since it is not used in delete.c. (CVS 6571) (check-in: 71756dc870 user: drh tags: trunk) | |
2009-04-29
| ||
18:12 | Fixed compile for MSVC; removed compiler warnings; changes for NDEBUG build; minor code tweaks. (CVS 6570) (check-in: e98b12425f user: shane tags: trunk) | |
17:49 | Modify the assemblePage() function in btree.c so that it runs slightly faster. (CVS 6569) (check-in: 7ec42e989f user: danielk1977 tags: trunk) | |
Changes
Changes to ext/async/sqlite3async.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* ** 2005 December 14 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | /* ** 2005 December 14 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** ** $Id: sqlite3async.c,v 1.5 2009/04/29 18:12:00 shane Exp $ ** ** This file contains the implementation of an asynchronous IO backend ** for SQLite. */ #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_ASYNCIO) #include "sqlite3async.h" #include "sqliteInt.h" #include <stdarg.h> #include <string.h> #include <assert.h> /* Useful macros used in several places */ #define MIN(x,y) ((x)<(y)?(x):(y)) #define MAX(x,y) ((x)>(y)?(x):(y)) |
︙ | ︙ | |||
45 46 47 48 49 50 51 52 53 54 55 56 57 58 | va_list ap; va_start(ap, zFormat); z = sqlite3_vmprintf(zFormat, ap); va_end(ap); fprintf(stderr, "[%d] %s", 0 /* (int)pthread_self() */, z); sqlite3_free(z); } #endif /* ** THREAD SAFETY NOTES ** ** Basic rules: ** | > > | 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | va_list ap; va_start(ap, zFormat); z = sqlite3_vmprintf(zFormat, ap); va_end(ap); fprintf(stderr, "[%d] %s", 0 /* (int)pthread_self() */, z); sqlite3_free(z); } #else # define ASYNC_TRACE(X) #endif /* ** THREAD SAFETY NOTES ** ** Basic rules: ** |
︙ | ︙ | |||
297 298 299 300 301 302 303 304 305 306 307 308 309 310 | } static void async_cond_signal(int eCond){ assert( mutex_held(ASYNC_MUTEX_QUEUE) ); SetEvent(primitives.aCond[eCond]); } static void async_sched_yield(void){ /* Todo: Find out if win32 offers anything like sched_yield() */ } #else /* The following block contains the pthreads specific code. */ #include <pthread.h> #include <sched.h> | > | 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 | } static void async_cond_signal(int eCond){ assert( mutex_held(ASYNC_MUTEX_QUEUE) ); SetEvent(primitives.aCond[eCond]); } static void async_sched_yield(void){ /* Todo: Find out if win32 offers anything like sched_yield() */ Sleep(0); } #else /* The following block contains the pthreads specific code. */ #include <pthread.h> #include <sched.h> |
︙ | ︙ | |||
674 675 676 677 678 679 680 | } if( pBase->pMethods ){ rc = pBase->pMethods->xFileSize(pBase, &filesize); if( rc!=SQLITE_OK ){ goto asyncread_out; } | | | | | 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 | } if( pBase->pMethods ){ rc = pBase->pMethods->xFileSize(pBase, &filesize); if( rc!=SQLITE_OK ){ goto asyncread_out; } nRead = (int)MIN(filesize - iOffset, iAmt); if( nRead>0 ){ rc = pBase->pMethods->xRead(pBase, zOut, nRead, iOffset); ASYNC_TRACE(("READ %s %d bytes at %d\n", p->zName, nRead, iOffset)); } } if( rc==SQLITE_OK ){ AsyncWrite *pWrite; char *zName = p->zName; for(pWrite=async.pQueueFirst; pWrite; pWrite = pWrite->pNext){ if( pWrite->op==ASYNC_WRITE && ( (pWrite->pFileData==p) || (zName && pWrite->pFileData->zName==zName) )){ sqlite3_int64 iBeginOut = (pWrite->iOffset-iOffset); sqlite3_int64 iBeginIn = -iBeginOut; int nCopy; if( iBeginIn<0 ) iBeginIn = 0; if( iBeginOut<0 ) iBeginOut = 0; nCopy = MIN(pWrite->nByte-iBeginIn, iAmt-iBeginOut); if( nCopy>0 ){ |
︙ | ︙ | |||
897 898 899 900 901 902 903 904 905 906 907 908 909 910 | AsyncFileLock *pIter; AsyncFileData *p = ((AsyncFile *)pFile)->pData; async_mutex_enter(ASYNC_MUTEX_LOCK); for(pIter=p->pLock->pList; pIter; pIter=pIter->pNext){ if( pIter->eLock>=SQLITE_LOCK_RESERVED ){ ret = 1; } } async_mutex_leave(ASYNC_MUTEX_LOCK); ASYNC_TRACE(("CHECK-LOCK %d (%s)\n", ret, p->zName)); *pResOut = ret; return SQLITE_OK; | > | 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 | AsyncFileLock *pIter; AsyncFileData *p = ((AsyncFile *)pFile)->pData; async_mutex_enter(ASYNC_MUTEX_LOCK); for(pIter=p->pLock->pList; pIter; pIter=pIter->pNext){ if( pIter->eLock>=SQLITE_LOCK_RESERVED ){ ret = 1; break; } } async_mutex_leave(ASYNC_MUTEX_LOCK); ASYNC_TRACE(("CHECK-LOCK %d (%s)\n", ret, p->zName)); *pResOut = ret; return SQLITE_OK; |
︙ | ︙ | |||
923 924 925 926 927 928 929 | } } return SQLITE_ERROR; } /* ** Return the device characteristics and sector-size of the device. It | | > > | 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 | } } return SQLITE_ERROR; } /* ** Return the device characteristics and sector-size of the device. It ** is tricky to implement these correctly, as this backend might ** not have an open file handle at this point. */ static int asyncSectorSize(sqlite3_file *pFile){ UNUSED_PARAMETER(pFile); return 512; } static int asyncDeviceCharacteristics(sqlite3_file *pFile){ UNUSED_PARAMETER(pFile); return 0; } static int unlinkAsyncFile(AsyncFileData *pData){ AsyncFileLock **ppIter; int rc = SQLITE_OK; |
︙ | ︙ | |||
1018 1019 1020 1021 1022 1023 1024 | AsyncFileData *pData; AsyncLock *pLock = 0; char *z; int isAsyncOpen = doAsynchronousOpen(flags); /* If zName is NULL, then the upper layer is requesting an anonymous file */ if( zName ){ | | | 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 | AsyncFileData *pData; AsyncLock *pLock = 0; char *z; int isAsyncOpen = doAsynchronousOpen(flags); /* If zName is NULL, then the upper layer is requesting an anonymous file */ if( zName ){ nName = (int)strlen(zName)+1; } nByte = ( sizeof(AsyncFileData) + /* AsyncFileData structure */ 2 * pVfs->szOsFile + /* AsyncFileData.pBaseRead and pBaseWrite */ nName /* AsyncFileData.zName */ ); |
︙ | ︙ | |||
1138 1139 1140 1141 1142 1143 1144 | } /* ** Implementation of sqlite3OsDelete. Add an entry to the end of the ** write-op queue to perform the delete. */ static int asyncDelete(sqlite3_vfs *pAsyncVfs, const char *z, int syncDir){ | > | | 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 | } /* ** Implementation of sqlite3OsDelete. Add an entry to the end of the ** write-op queue to perform the delete. */ static int asyncDelete(sqlite3_vfs *pAsyncVfs, const char *z, int syncDir){ UNUSED_PARAMETER(pAsyncVfs); return addNewAsyncWrite(0, ASYNC_DELETE, syncDir, (int)strlen(z)+1, z); } /* ** Implementation of sqlite3OsAccess. This method holds the mutex from ** start to finish. */ static int asyncAccess( |
︙ | ︙ |