Lines Matching refs:pFile

1195 int unixFileMutexHeld(unixFile *pFile){  in unixFileMutexHeld()  argument
1196 assert( pFile->pInode ); in unixFileMutexHeld()
1197 return sqlite3_mutex_held(pFile->pInode->pLockMutex); in unixFileMutexHeld()
1199 int unixFileMutexNotheld(unixFile *pFile){ in unixFileMutexNotheld() argument
1200 assert( pFile->pInode ); in unixFileMutexNotheld()
1201 return sqlite3_mutex_notheld(pFile->pInode->pLockMutex); in unixFileMutexNotheld()
1287 static void robust_close(unixFile *pFile, int h, int lineno){ in robust_close() argument
1290 pFile ? pFile->zPath : 0, lineno); in robust_close()
1298 static void storeLastErrno(unixFile *pFile, int error){ in storeLastErrno() argument
1299 pFile->lastErrno = error; in storeLastErrno()
1305 static void closePendingFds(unixFile *pFile){ in closePendingFds() argument
1306 unixInodeInfo *pInode = pFile->pInode; in closePendingFds()
1309 assert( unixFileMutexHeld(pFile) ); in closePendingFds()
1312 robust_close(pFile, p->fd, __LINE__); in closePendingFds()
1324 static void releaseInodeInfo(unixFile *pFile){ in releaseInodeInfo() argument
1325 unixInodeInfo *pInode = pFile->pInode; in releaseInodeInfo()
1327 assert( unixFileMutexNotheld(pFile) ); in releaseInodeInfo()
1333 closePendingFds(pFile); in releaseInodeInfo()
1362 unixFile *pFile, /* Unix file with file desc used in the key */ in findInodeInfo() argument
1376 fd = pFile->h; in findInodeInfo()
1379 storeLastErrno(pFile, errno); in findInodeInfo()
1381 if( pFile->lastErrno==EOVERFLOW ) return SQLITE_NOLFS; in findInodeInfo()
1397 if( statbuf.st_size==0 && (pFile->fsFlags & SQLITE_FSFLAGS_IS_MSDOS)!=0 ){ in findInodeInfo()
1400 storeLastErrno(pFile, errno); in findInodeInfo()
1405 storeLastErrno(pFile, errno); in findInodeInfo()
1414 fileId.pId = pFile->pId; in findInodeInfo()
1453 static int fileHasMoved(unixFile *pFile){ in fileHasMoved() argument
1455 return pFile->pInode!=0 && pFile->pId!=pFile->pInode->fileId.pId; in fileHasMoved()
1458 return pFile->pInode!=0 && in fileHasMoved()
1459 (osStat(pFile->zPath, &buf)!=0 in fileHasMoved()
1460 || (u64)buf.st_ino!=pFile->pInode->fileId.ino); in fileHasMoved()
1474 static void verifyDbFile(unixFile *pFile){ in verifyDbFile() argument
1479 if( pFile->ctrlFlags & UNIXFILE_NOLOCK ) return; in verifyDbFile()
1481 rc = osFstat(pFile->h, &buf); in verifyDbFile()
1483 sqlite3_log(SQLITE_WARNING, "cannot fstat db file %s", pFile->zPath); in verifyDbFile()
1487 sqlite3_log(SQLITE_WARNING, "file unlinked while open: %s", pFile->zPath); in verifyDbFile()
1491 sqlite3_log(SQLITE_WARNING, "multiple links to file: %s", pFile->zPath); in verifyDbFile()
1494 if( fileHasMoved(pFile) ){ in verifyDbFile()
1495 sqlite3_log(SQLITE_WARNING, "file renamed while open: %s", pFile->zPath); in verifyDbFile()
1510 unixFile *pFile = (unixFile*)id; in unixCheckReservedLock() local
1514 assert( pFile ); in unixCheckReservedLock()
1515 assert( pFile->eFileLock<=SHARED_LOCK ); in unixCheckReservedLock()
1516 sqlite3_mutex_enter(pFile->pInode->pLockMutex); in unixCheckReservedLock()
1519 if( pFile->pInode->eFileLock>SHARED_LOCK ){ in unixCheckReservedLock()
1526 if( !reserved && !pFile->pInode->bProcessLock ){ in unixCheckReservedLock()
1532 if( osFcntl(pFile->h, F_GETLK, &lock) ){ in unixCheckReservedLock()
1534 storeLastErrno(pFile, errno); in unixCheckReservedLock()
1541 sqlite3_mutex_leave(pFile->pInode->pLockMutex); in unixCheckReservedLock()
1542 OSTRACE(("TEST WR-LOCK %d %d %d (unix)\n", pFile->h, rc, reserved)); in unixCheckReservedLock()
1570 unixFile *pFile /* Structure holding timeout value */ in osSetPosixAdvisoryLock() argument
1572 int tm = pFile->iBusyTimeout; in osSetPosixAdvisoryLock()
1608 static int unixFileLock(unixFile *pFile, struct flock *pLock){ in unixFileLock() argument
1610 unixInodeInfo *pInode = pFile->pInode; in unixFileLock()
1613 if( (pFile->ctrlFlags & (UNIXFILE_EXCL|UNIXFILE_RDONLY))==UNIXFILE_EXCL ){ in unixFileLock()
1621 rc = osSetPosixAdvisoryLock(pFile->h, &lock, pFile); in unixFileLock()
1629 rc = osSetPosixAdvisoryLock(pFile->h, pLock, pFile); in unixFileLock()
1699 unixFile *pFile = (unixFile*)id; in unixLock() local
1704 assert( pFile ); in unixLock()
1705 OSTRACE(("LOCK %d %s was %s(%s,%d) pid=%d (unix)\n", pFile->h, in unixLock()
1706 azFileLock(eFileLock), azFileLock(pFile->eFileLock), in unixLock()
1707 azFileLock(pFile->pInode->eFileLock), pFile->pInode->nShared, in unixLock()
1714 if( pFile->eFileLock>=eFileLock ){ in unixLock()
1715 OSTRACE(("LOCK %d %s ok (already held) (unix)\n", pFile->h, in unixLock()
1725 assert( pFile->eFileLock!=NO_LOCK || eFileLock==SHARED_LOCK ); in unixLock()
1727 assert( eFileLock!=RESERVED_LOCK || pFile->eFileLock==SHARED_LOCK ); in unixLock()
1731 pInode = pFile->pInode; in unixLock()
1737 if( (pFile->eFileLock!=pInode->eFileLock && in unixLock()
1751 assert( pFile->eFileLock==0 ); in unixLock()
1753 pFile->eFileLock = SHARED_LOCK; in unixLock()
1767 || (eFileLock==EXCLUSIVE_LOCK && pFile->eFileLock<PENDING_LOCK) in unixLock()
1771 if( unixFileLock(pFile, &lock) ){ in unixLock()
1775 storeLastErrno(pFile, tErrno); in unixLock()
1793 if( unixFileLock(pFile, &lock) ){ in unixLock()
1802 if( unixFileLock(pFile, &lock) && rc==SQLITE_OK ){ in unixLock()
1810 storeLastErrno(pFile, tErrno); in unixLock()
1814 pFile->eFileLock = SHARED_LOCK; in unixLock()
1827 assert( 0!=pFile->eFileLock ); in unixLock()
1839 if( unixFileLock(pFile, &lock) ){ in unixLock()
1843 storeLastErrno(pFile, tErrno); in unixLock()
1856 && pFile->eFileLock<=SHARED_LOCK in unixLock()
1859 pFile->transCntrChng = 0; in unixLock()
1860 pFile->dbUpdate = 0; in unixLock()
1861 pFile->inNormalWrite = 1; in unixLock()
1867 pFile->eFileLock = eFileLock; in unixLock()
1870 pFile->eFileLock = PENDING_LOCK; in unixLock()
1876 OSTRACE(("LOCK %d %s %s (unix)\n", pFile->h, azFileLock(eFileLock), in unixLock()
1885 static void setPendingFd(unixFile *pFile){ in setPendingFd() argument
1886 unixInodeInfo *pInode = pFile->pInode; in setPendingFd()
1887 UnixUnusedFd *p = pFile->pPreallocatedUnused; in setPendingFd()
1888 assert( unixFileMutexHeld(pFile) ); in setPendingFd()
1891 pFile->h = -1; in setPendingFd()
1892 pFile->pPreallocatedUnused = 0; in setPendingFd()
1909 unixFile *pFile = (unixFile*)id; in posixUnlock() local
1914 assert( pFile ); in posixUnlock()
1915 OSTRACE(("UNLOCK %d %d was %d(%d,%d) pid=%d (unix)\n", pFile->h, eFileLock, in posixUnlock()
1916 pFile->eFileLock, pFile->pInode->eFileLock, pFile->pInode->nShared, in posixUnlock()
1920 if( pFile->eFileLock<=eFileLock ){ in posixUnlock()
1923 pInode = pFile->pInode; in posixUnlock()
1926 if( pFile->eFileLock>SHARED_LOCK ){ in posixUnlock()
1927 assert( pInode->eFileLock==pFile->eFileLock ); in posixUnlock()
1938 pFile->inNormalWrite = 0; in posixUnlock()
1964 if( unixFileLock(pFile, &lock)==(-1) ){ in posixUnlock()
1967 storeLastErrno(pFile, tErrno); in posixUnlock()
1974 if( unixFileLock(pFile, &lock)==(-1) ){ in posixUnlock()
1978 storeLastErrno(pFile, tErrno); in posixUnlock()
1986 if( unixFileLock(pFile, &lock)==(-1) ){ in posixUnlock()
1989 storeLastErrno(pFile, tErrno); in posixUnlock()
1999 if( unixFileLock(pFile, &lock) ){ in posixUnlock()
2007 storeLastErrno(pFile, errno); in posixUnlock()
2016 if( unixFileLock(pFile, &lock)==0 ){ in posixUnlock()
2020 storeLastErrno(pFile, errno); in posixUnlock()
2034 if( unixFileLock(pFile, &lock)==0 ){ in posixUnlock()
2038 storeLastErrno(pFile, errno); in posixUnlock()
2040 pFile->eFileLock = NO_LOCK; in posixUnlock()
2050 if( pInode->nLock==0 ) closePendingFds(pFile); in posixUnlock()
2056 pFile->eFileLock = eFileLock; in posixUnlock()
2091 unixFile *pFile = (unixFile*)id; in closeUnixFile() local
2093 unixUnmapfile(pFile); in closeUnixFile()
2095 if( pFile->h>=0 ){ in closeUnixFile()
2096 robust_close(pFile, pFile->h, __LINE__); in closeUnixFile()
2097 pFile->h = -1; in closeUnixFile()
2100 if( pFile->pId ){ in closeUnixFile()
2101 if( pFile->ctrlFlags & UNIXFILE_DELETE ){ in closeUnixFile()
2102 osUnlink(pFile->pId->zCanonicalName); in closeUnixFile()
2104 vxworksReleaseFileId(pFile->pId); in closeUnixFile()
2105 pFile->pId = 0; in closeUnixFile()
2109 if( pFile->ctrlFlags & UNIXFILE_DELETE ){ in closeUnixFile()
2110 osUnlink(pFile->zPath); in closeUnixFile()
2111 sqlite3_free(*(char**)&pFile->zPath); in closeUnixFile()
2112 pFile->zPath = 0; in closeUnixFile()
2115 OSTRACE(("CLOSE %-3d\n", pFile->h)); in closeUnixFile()
2117 sqlite3_free(pFile->pPreallocatedUnused); in closeUnixFile()
2118 memset(pFile, 0, sizeof(unixFile)); in closeUnixFile()
2127 unixFile *pFile = (unixFile *)id; in unixClose() local
2128 unixInodeInfo *pInode = pFile->pInode; in unixClose()
2131 verifyDbFile(pFile); in unixClose()
2133 assert( unixFileMutexNotheld(pFile) ); in unixClose()
2139 assert( pFile->pInode->nLock>0 || pFile->pInode->bProcessLock==0 ); in unixClose()
2147 setPendingFd(pFile); in unixClose()
2150 releaseInodeInfo(pFile); in unixClose()
2151 assert( pFile->pShm==0 ); in unixClose()
2242 unixFile *pFile = (unixFile*)id; in dotlockCheckReservedLock() local
2246 assert( pFile ); in dotlockCheckReservedLock()
2247 reserved = osAccess((const char*)pFile->lockingContext, 0)==0; in dotlockCheckReservedLock()
2248 OSTRACE(("TEST WR-LOCK %d %d %d (dotlock)\n", pFile->h, rc, reserved)); in dotlockCheckReservedLock()
2281 unixFile *pFile = (unixFile*)id; in dotlockLock() local
2282 char *zLockFile = (char *)pFile->lockingContext; in dotlockLock()
2289 if( pFile->eFileLock > NO_LOCK ){ in dotlockLock()
2290 pFile->eFileLock = eFileLock; in dotlockLock()
2310 storeLastErrno(pFile, tErrno); in dotlockLock()
2317 pFile->eFileLock = eFileLock; in dotlockLock()
2331 unixFile *pFile = (unixFile*)id; in dotlockUnlock() local
2332 char *zLockFile = (char *)pFile->lockingContext; in dotlockUnlock()
2335 assert( pFile ); in dotlockUnlock()
2336 OSTRACE(("UNLOCK %d %d was %d pid=%d (dotlock)\n", pFile->h, eFileLock, in dotlockUnlock()
2337 pFile->eFileLock, osGetpid(0))); in dotlockUnlock()
2341 if( pFile->eFileLock==eFileLock ){ in dotlockUnlock()
2349 pFile->eFileLock = SHARED_LOCK; in dotlockUnlock()
2362 storeLastErrno(pFile, tErrno); in dotlockUnlock()
2366 pFile->eFileLock = NO_LOCK; in dotlockUnlock()
2374 unixFile *pFile = (unixFile*)id; in dotlockClose() local
2377 sqlite3_free(pFile->lockingContext); in dotlockClose()
2422 unixFile *pFile = (unixFile*)id; in flockCheckReservedLock() local
2426 assert( pFile ); in flockCheckReservedLock()
2429 if( pFile->eFileLock>SHARED_LOCK ){ in flockCheckReservedLock()
2436 int lrc = robust_flock(pFile->h, LOCK_EX | LOCK_NB); in flockCheckReservedLock()
2439 lrc = robust_flock(pFile->h, LOCK_UN); in flockCheckReservedLock()
2444 storeLastErrno(pFile, tErrno); in flockCheckReservedLock()
2453 storeLastErrno(pFile, tErrno); in flockCheckReservedLock()
2458 OSTRACE(("TEST WR-LOCK %d %d %d (flock)\n", pFile->h, rc, reserved)); in flockCheckReservedLock()
2501 unixFile *pFile = (unixFile*)id; in flockLock() local
2503 assert( pFile ); in flockLock()
2507 if (pFile->eFileLock > NO_LOCK) { in flockLock()
2508 pFile->eFileLock = eFileLock; in flockLock()
2514 if (robust_flock(pFile->h, LOCK_EX | LOCK_NB)) { in flockLock()
2519 storeLastErrno(pFile, tErrno); in flockLock()
2523 pFile->eFileLock = eFileLock; in flockLock()
2525 OSTRACE(("LOCK %d %s %s (flock)\n", pFile->h, azFileLock(eFileLock), in flockLock()
2544 unixFile *pFile = (unixFile*)id; in flockUnlock() local
2546 assert( pFile ); in flockUnlock()
2547 OSTRACE(("UNLOCK %d %d was %d pid=%d (flock)\n", pFile->h, eFileLock, in flockUnlock()
2548 pFile->eFileLock, osGetpid(0))); in flockUnlock()
2552 if( pFile->eFileLock==eFileLock ){ in flockUnlock()
2558 pFile->eFileLock = eFileLock; in flockUnlock()
2563 if( robust_flock(pFile->h, LOCK_UN) ){ in flockUnlock()
2569 pFile->eFileLock = NO_LOCK; in flockUnlock()
2609 unixFile *pFile = (unixFile*)id; in semXCheckReservedLock() local
2613 assert( pFile ); in semXCheckReservedLock()
2616 if( pFile->eFileLock>SHARED_LOCK ){ in semXCheckReservedLock()
2622 sem_t *pSem = pFile->pInode->pSem; in semXCheckReservedLock()
2628 storeLastErrno(pFile, tErrno); in semXCheckReservedLock()
2631 reserved = (pFile->eFileLock < SHARED_LOCK); in semXCheckReservedLock()
2638 OSTRACE(("TEST WR-LOCK %d %d %d (sem)\n", pFile->h, rc, reserved)); in semXCheckReservedLock()
2674 unixFile *pFile = (unixFile*)id; in semXLock() local
2675 sem_t *pSem = pFile->pInode->pSem; in semXLock()
2680 if (pFile->eFileLock > NO_LOCK) { in semXLock()
2681 pFile->eFileLock = eFileLock; in semXLock()
2693 pFile->eFileLock = eFileLock; in semXLock()
2707 unixFile *pFile = (unixFile*)id; in semXUnlock() local
2708 sem_t *pSem = pFile->pInode->pSem; in semXUnlock()
2710 assert( pFile ); in semXUnlock()
2712 OSTRACE(("UNLOCK %d %d was %d pid=%d (sem)\n", pFile->h, eFileLock, in semXUnlock()
2713 pFile->eFileLock, osGetpid(0))); in semXUnlock()
2717 if( pFile->eFileLock==eFileLock ){ in semXUnlock()
2723 pFile->eFileLock = eFileLock; in semXUnlock()
2732 storeLastErrno(pFile, tErrno); in semXUnlock()
2736 pFile->eFileLock = NO_LOCK; in semXUnlock()
2745 unixFile *pFile = (unixFile*)id; in semXClose() local
2747 assert( pFile ); in semXClose()
2748 assert( unixFileMutexNotheld(pFile) ); in semXClose()
2750 releaseInodeInfo(pFile); in semXClose()
2805 unixFile *pFile, /* Open file descriptor on path */ in afpSetLock() argument
2817 pb.fd = pFile->h; in afpSetLock()
2820 (setLockFlag?"ON":"OFF"), pFile->h, (pb.fd==-1?"[testval-1]":""), in afpSetLock()
2835 storeLastErrno(pFile, tErrno); in afpSetLock()
2852 unixFile *pFile = (unixFile*)id; in afpCheckReservedLock() local
2857 assert( pFile ); in afpCheckReservedLock()
2858 context = (afpLockingContext *) pFile->lockingContext; in afpCheckReservedLock()
2863 sqlite3_mutex_enter(pFile->pInode->pLockMutex); in afpCheckReservedLock()
2865 if( pFile->pInode->eFileLock>SHARED_LOCK ){ in afpCheckReservedLock()
2873 int lrc = afpSetLock(context->dbPath, pFile, RESERVED_BYTE, 1,1); in afpCheckReservedLock()
2877 lrc = afpSetLock(context->dbPath, pFile, RESERVED_BYTE, 1, 0); in afpCheckReservedLock()
2887 sqlite3_mutex_leave(pFile->pInode->pLockMutex); in afpCheckReservedLock()
2888 OSTRACE(("TEST WR-LOCK %d %d %d (afp)\n", pFile->h, rc, reserved)); in afpCheckReservedLock()
2920 unixFile *pFile = (unixFile*)id; in afpLock() local
2921 unixInodeInfo *pInode = pFile->pInode; in afpLock()
2922 afpLockingContext *context = (afpLockingContext *) pFile->lockingContext; in afpLock()
2924 assert( pFile ); in afpLock()
2925 OSTRACE(("LOCK %d %s was %s(%s,%d) pid=%d (afp)\n", pFile->h, in afpLock()
2926 azFileLock(eFileLock), azFileLock(pFile->eFileLock), in afpLock()
2933 if( pFile->eFileLock>=eFileLock ){ in afpLock()
2934 OSTRACE(("LOCK %d %s ok (already held) (afp)\n", pFile->h, in afpLock()
2944 assert( pFile->eFileLock!=NO_LOCK || eFileLock==SHARED_LOCK ); in afpLock()
2946 assert( eFileLock!=RESERVED_LOCK || pFile->eFileLock==SHARED_LOCK ); in afpLock()
2950 pInode = pFile->pInode; in afpLock()
2956 if( (pFile->eFileLock!=pInode->eFileLock && in afpLock()
2970 assert( pFile->eFileLock==0 ); in afpLock()
2972 pFile->eFileLock = SHARED_LOCK; in afpLock()
2983 || (eFileLock==EXCLUSIVE_LOCK && pFile->eFileLock<PENDING_LOCK) in afpLock()
2986 failed = afpSetLock(context->dbPath, pFile, PENDING_BYTE, 1, 1); in afpLock()
3008 lrc1 = afpSetLock(context->dbPath, pFile, in afpLock()
3011 lrc1Errno = pFile->lastErrno; in afpLock()
3014 lrc2 = afpSetLock(context->dbPath, pFile, PENDING_BYTE, 1, 0); in afpLock()
3017 storeLastErrno(pFile, lrc1Errno); in afpLock()
3026 pFile->eFileLock = SHARED_LOCK; in afpLock()
3040 assert( 0!=pFile->eFileLock ); in afpLock()
3041 if (eFileLock >= RESERVED_LOCK && pFile->eFileLock < RESERVED_LOCK) { in afpLock()
3043 failed = afpSetLock(context->dbPath, pFile, RESERVED_BYTE, 1,1); in afpLock()
3054 if( !(failed = afpSetLock(context->dbPath, pFile, SHARED_FIRST + in afpLock()
3058 failed = afpSetLock(context->dbPath, pFile, SHARED_FIRST, in afpLock()
3060 if( failed && (failed2 = afpSetLock(context->dbPath, pFile, in afpLock()
3079 pFile->eFileLock = eFileLock; in afpLock()
3082 pFile->eFileLock = PENDING_LOCK; in afpLock()
3088 OSTRACE(("LOCK %d %s %s (afp)\n", pFile->h, azFileLock(eFileLock), in afpLock()
3102 unixFile *pFile = (unixFile*)id; in afpUnlock() local
3104 afpLockingContext *context = (afpLockingContext *) pFile->lockingContext; in afpUnlock()
3107 int h = pFile->h; in afpUnlock()
3110 assert( pFile ); in afpUnlock()
3111 OSTRACE(("UNLOCK %d %d was %d(%d,%d) pid=%d (afp)\n", pFile->h, eFileLock, in afpUnlock()
3112 pFile->eFileLock, pFile->pInode->eFileLock, pFile->pInode->nShared, in afpUnlock()
3116 if( pFile->eFileLock<=eFileLock ){ in afpUnlock()
3119 pInode = pFile->pInode; in afpUnlock()
3122 if( pFile->eFileLock>SHARED_LOCK ){ in afpUnlock()
3123 assert( pInode->eFileLock==pFile->eFileLock ); in afpUnlock()
3137 assert( pFile->inNormalWrite==0 in afpUnlock()
3138 || pFile->dbUpdate==0 in afpUnlock()
3139 || pFile->transCntrChng==1 ); in afpUnlock()
3140 pFile->inNormalWrite = 0; in afpUnlock()
3143 if( pFile->eFileLock==EXCLUSIVE_LOCK ){ in afpUnlock()
3144 rc = afpSetLock(context->dbPath, pFile, SHARED_FIRST, SHARED_SIZE, 0); in afpUnlock()
3148 rc = afpSetLock(context->dbPath, pFile, sharedLockByte, 1, 1); in afpUnlock()
3153 if( rc==SQLITE_OK && pFile->eFileLock>=PENDING_LOCK ){ in afpUnlock()
3154 rc = afpSetLock(context->dbPath, pFile, PENDING_BYTE, 1, 0); in afpUnlock()
3156 if( rc==SQLITE_OK && pFile->eFileLock>=RESERVED_LOCK && context->reserved ){ in afpUnlock()
3157 rc = afpSetLock(context->dbPath, pFile, RESERVED_BYTE, 1, 0); in afpUnlock()
3179 rc = afpSetLock(context->dbPath, pFile, sharedLockByte, 1, 0); in afpUnlock()
3183 pFile->eFileLock = NO_LOCK; in afpUnlock()
3189 if( pInode->nLock==0 ) closePendingFds(pFile); in afpUnlock()
3195 pFile->eFileLock = eFileLock; in afpUnlock()
3205 unixFile *pFile = (unixFile*)id; in afpClose() local
3208 assert( unixFileMutexNotheld(pFile) ); in afpClose()
3210 if( pFile->pInode ){ in afpClose()
3211 unixInodeInfo *pInode = pFile->pInode; in afpClose()
3219 setPendingFd(pFile); in afpClose()
3223 releaseInodeInfo(pFile); in afpClose()
3224 sqlite3_free(pFile->lockingContext); in afpClose()
3342 unixFile *pFile = (unixFile *)id; in unixRead() local
3351 assert( pFile->pPreallocatedUnused==0 in unixRead()
3360 if( offset<pFile->mmapSize ){ in unixRead()
3361 if( offset+amt <= pFile->mmapSize ){ in unixRead()
3362 memcpy(pBuf, &((u8 *)(pFile->pMapRegion))[offset], amt); in unixRead()
3365 int nCopy = pFile->mmapSize - offset; in unixRead()
3366 memcpy(pBuf, &((u8 *)(pFile->pMapRegion))[offset], nCopy); in unixRead()
3374 got = seekAndRead(pFile, offset, pBuf, amt); in unixRead()
3385 switch( pFile->lastErrno ){ in unixRead()
3398 storeLastErrno(pFile, 0); /* not a system error */ in unixRead()
3473 unixFile *pFile = (unixFile*)id; in unixWrite() local
3481 assert( pFile->pPreallocatedUnused==0 in unixWrite()
3494 if( pFile->inNormalWrite ){ in unixWrite()
3495 pFile->dbUpdate = 1; /* The database has been modified */ in unixWrite()
3500 rc = seekAndRead(pFile, 24, oldCntr, 4); in unixWrite()
3503 pFile->transCntrChng = 1; /* The transaction counter has changed */ in unixWrite()
3512 if( offset<pFile->mmapSize ){ in unixWrite()
3513 if( offset+amt <= pFile->mmapSize ){ in unixWrite()
3514 memcpy(&((u8 *)(pFile->pMapRegion))[offset], pBuf, amt); in unixWrite()
3517 int nCopy = pFile->mmapSize - offset; in unixWrite()
3518 memcpy(&((u8 *)(pFile->pMapRegion))[offset], pBuf, nCopy); in unixWrite()
3526 while( (wrote = seekAndWrite(pFile, offset, pBuf, amt))<amt && wrote>0 ){ in unixWrite()
3535 if( wrote<0 && pFile->lastErrno!=ENOSPC ){ in unixWrite()
3539 storeLastErrno(pFile, 0); /* not a system error */ in unixWrite()
3737 unixFile *pFile = (unixFile*)id; in unixSync() local
3752 assert( pFile ); in unixSync()
3753 OSTRACE(("SYNC %-3d\n", pFile->h)); in unixSync()
3754 rc = full_fsync(pFile->h, isFullsync, isDataOnly); in unixSync()
3757 storeLastErrno(pFile, errno); in unixSync()
3758 return unixLogError(SQLITE_IOERR_FSYNC, "full_fsync", pFile->zPath); in unixSync()
3765 if( pFile->ctrlFlags & UNIXFILE_DIRSYNC ){ in unixSync()
3767 OSTRACE(("DIRSYNC %s (have_fullfsync=%d fullsync=%d)\n", pFile->zPath, in unixSync()
3769 rc = osOpenDirectory(pFile->zPath, &dirfd); in unixSync()
3772 robust_close(pFile, dirfd, __LINE__); in unixSync()
3777 pFile->ctrlFlags &= ~UNIXFILE_DIRSYNC; in unixSync()
3786 unixFile *pFile = (unixFile *)id; in unixTruncate() local
3788 assert( pFile ); in unixTruncate()
3796 if( pFile->szChunk>0 ){ in unixTruncate()
3797 nByte = ((nByte + pFile->szChunk - 1)/pFile->szChunk) * pFile->szChunk; in unixTruncate()
3800 rc = robust_ftruncate(pFile->h, nByte); in unixTruncate()
3802 storeLastErrno(pFile, errno); in unixTruncate()
3803 return unixLogError(SQLITE_IOERR_TRUNCATE, "ftruncate", pFile->zPath); in unixTruncate()
3813 if( pFile->inNormalWrite && nByte==0 ){ in unixTruncate()
3814 pFile->transCntrChng = 1; in unixTruncate()
3823 if( nByte<pFile->mmapSize ){ in unixTruncate()
3824 pFile->mmapSize = nByte; in unixTruncate()
3873 static int fcntlSizeHint(unixFile *pFile, i64 nByte){ in fcntlSizeHint() argument
3874 if( pFile->szChunk>0 ){ in fcntlSizeHint()
3878 if( osFstat(pFile->h, &buf) ){ in fcntlSizeHint()
3882 nSize = ((nByte+pFile->szChunk-1) / pFile->szChunk) * pFile->szChunk; in fcntlSizeHint()
3891 err = osFallocate(pFile->h, buf.st_size, nSize-buf.st_size); in fcntlSizeHint()
3911 nWrite = seekAndWrite(pFile, iWrite, "", 1); in fcntlSizeHint()
3919 if( pFile->mmapSizeMax>0 && nByte>pFile->mmapSize ){ in fcntlSizeHint()
3921 if( pFile->szChunk<=0 ){ in fcntlSizeHint()
3922 if( robust_ftruncate(pFile->h, nByte) ){ in fcntlSizeHint()
3923 storeLastErrno(pFile, errno); in fcntlSizeHint()
3924 return unixLogError(SQLITE_IOERR_TRUNCATE, "ftruncate", pFile->zPath); in fcntlSizeHint()
3928 rc = unixMapfile(pFile, nByte); in fcntlSizeHint()
3942 static void unixModeBit(unixFile *pFile, unsigned char mask, int *pArg){ in unixModeBit() argument
3944 *pArg = (pFile->ctrlFlags & mask)!=0; in unixModeBit()
3946 pFile->ctrlFlags &= ~mask; in unixModeBit()
3948 pFile->ctrlFlags |= mask; in unixModeBit()
3962 unixFile *pFile = (unixFile*)id; in unixFileControl() local
3966 int rc = osIoctl(pFile->h, F2FS_IOC_START_ATOMIC_WRITE); in unixFileControl()
3970 int rc = osIoctl(pFile->h, F2FS_IOC_COMMIT_ATOMIC_WRITE); in unixFileControl()
3974 int rc = osIoctl(pFile->h, F2FS_IOC_ABORT_VOLATILE_WRITE); in unixFileControl()
3980 *(int*)pArg = pFile->eFileLock; in unixFileControl()
3984 *(int*)pArg = pFile->lastErrno; in unixFileControl()
3988 pFile->szChunk = *(int *)pArg; in unixFileControl()
3994 rc = fcntlSizeHint(pFile, *(i64 *)pArg); in unixFileControl()
3999 unixModeBit(pFile, UNIXFILE_PERSIST_WAL, (int*)pArg); in unixFileControl()
4003 unixModeBit(pFile, UNIXFILE_PSOW, (int*)pArg); in unixFileControl()
4007 *(char**)pArg = sqlite3_mprintf("%s", pFile->pVfs->zName); in unixFileControl()
4011 char *zTFile = sqlite3_malloc64( pFile->pVfs->mxPathname ); in unixFileControl()
4013 unixGetTempname(pFile->pVfs->mxPathname, zTFile); in unixFileControl()
4019 *(int*)pArg = fileHasMoved(pFile); in unixFileControl()
4024 int iOld = pFile->iBusyTimeout; in unixFileControl()
4025 pFile->iBusyTimeout = *(int*)pArg; in unixFileControl()
4045 *(i64*)pArg = pFile->mmapSizeMax; in unixFileControl()
4046 if( newLimit>=0 && newLimit!=pFile->mmapSizeMax && pFile->nFetchOut==0 ){ in unixFileControl()
4047 pFile->mmapSizeMax = newLimit; in unixFileControl()
4048 if( pFile->mmapSize>0 ){ in unixFileControl()
4049 unixUnmapfile(pFile); in unixFileControl()
4050 rc = unixMapfile(pFile, -1); in unixFileControl()
4121 static void setDeviceCharacteristics(unixFile *pFile){ in setDeviceCharacteristics() argument
4122 if( pFile->sectorSize == 0 ){ in setDeviceCharacteristics()
4126 pFile->sectorSize = SQLITE_DEFAULT_SECTOR_SIZE; in setDeviceCharacteristics()
4127 pFile->deviceCharacteristics = 0; in setDeviceCharacteristics()
4128 if( fstatvfs(pFile->h, &fsInfo) == -1 ) { in setDeviceCharacteristics()
4133 pFile->sectorSize = fsInfo.f_bsize; in setDeviceCharacteristics()
4134 pFile->deviceCharacteristics = in setDeviceCharacteristics()
4142 pFile->sectorSize = fsInfo.f_bsize; in setDeviceCharacteristics()
4143 pFile->deviceCharacteristics = in setDeviceCharacteristics()
4145 (pFile->sectorSize / 512 * SQLITE_IOCAP_ATOMIC512) | in setDeviceCharacteristics()
4152 pFile->sectorSize = fsInfo.f_bsize; in setDeviceCharacteristics()
4153 pFile->deviceCharacteristics = in setDeviceCharacteristics()
4161 pFile->sectorSize = fsInfo.f_bsize; in setDeviceCharacteristics()
4162 pFile->deviceCharacteristics = in setDeviceCharacteristics()
4164 ((pFile->sectorSize / 512 * SQLITE_IOCAP_ATOMIC512) << 1) - 2 | in setDeviceCharacteristics()
4169 pFile->sectorSize = fsInfo.f_bsize; in setDeviceCharacteristics()
4170 pFile->deviceCharacteristics = in setDeviceCharacteristics()
4172 ((pFile->sectorSize / 512 * SQLITE_IOCAP_ATOMIC512) << 1) - 2 | in setDeviceCharacteristics()
4177 pFile->deviceCharacteristics = in setDeviceCharacteristics()
4186 if( pFile->sectorSize % 512 != 0 ){ in setDeviceCharacteristics()
4187 pFile->deviceCharacteristics = 0; in setDeviceCharacteristics()
4188 pFile->sectorSize = SQLITE_DEFAULT_SECTOR_SIZE; in setDeviceCharacteristics()
4335 static int unixFcntlExternalReader(unixFile *pFile, int *piOut){ in unixFcntlExternalReader() argument
4338 if( pFile->pShm){ in unixFcntlExternalReader()
4339 unixShmNode *pShmNode = pFile->pShm->pShmNode; in unixFcntlExternalReader()
4368 unixFile *pFile, /* Open connection to the WAL file */ in unixShmSystemLock() argument
4378 pShmNode = pFile->pInode->pShmNode; in unixShmSystemLock()
4395 res = osSetPosixAdvisoryLock(pShmNode->hShm, &f, pFile); in unixShmSystemLock()
4398 rc = (pFile->iBusyTimeout ? SQLITE_BUSY_TIMEOUT : SQLITE_BUSY); in unixShmSystemLock()
6086 sqlite3_file *pFile, /* The file descriptor to be filled in */ in unixOpen() argument
6090 unixFile *p = (unixFile *)pFile; in unixOpen()
6297 ((unixFile*)pFile)->fsFlags |= SQLITE_FSFLAGS_IS_MSDOS; in unixOpen()
6300 ((unixFile*)pFile)->fsFlags |= SQLITE_FSFLAGS_IS_MSDOS; in unixOpen()
6328 rc = fillInUnixFile(pVfs, fd, pFile, zPath, ctrlFlags); in unixOpen()
6330 rc = proxyTransformUnixFile((unixFile*)pFile, ":auto:"); in unixOpen()
6336 unixClose(pFile); in unixOpen()
6348 rc = fillInUnixFile(pVfs, fd, pFile, zPath, ctrlFlags); in unixOpen()
7176 static int proxyBreakConchLock(unixFile *pFile, uuid_t myHostID){ in proxyBreakConchLock() argument
7177 proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; in proxyBreakConchLock()
7218 robust_close(pFile, conchFile->h, __LINE__); in proxyBreakConchLock()
7226 robust_close(pFile, fd, __LINE__); in proxyBreakConchLock()
7236 static int proxyConchLock(unixFile *pFile, uuid_t myHostID, int lockType){ in proxyConchLock() argument
7237 proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; in proxyConchLock()
7256 storeLastErrno(pFile, errno); in proxyConchLock()
7276 storeLastErrno(pFile, errno); in proxyConchLock()
7293 if( 0==proxyBreakConchLock(pFile, myHostID) ){ in proxyConchLock()
7314 static int proxyTakeConch(unixFile *pFile){ in proxyTakeConch() argument
7315 proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; in proxyTakeConch()
7339 storeLastErrno(pFile, pError); in proxyTakeConch()
7342 rc = proxyConchLock(pFile, myHostID, SHARED_LOCK); in proxyTakeConch()
7350 storeLastErrno(pFile, conchFile->lastErrno); in proxyTakeConch()
7420 rc = proxyConchLock(pFile, myHostID, EXCLUSIVE_LOCK); in proxyTakeConch()
7423 rc = proxyConchLock(pFile, myHostID, EXCLUSIVE_LOCK); in proxyTakeConch()
7446 int err = osFstat(pFile->h, &buf); in proxyTakeConch()
7475 OSTRACE(("TRANSPROXY: CLOSE %d\n", pFile->h)); in proxyTakeConch()
7476 if( rc==SQLITE_OK && pFile->openFlags ){ in proxyTakeConch()
7478 if( pFile->h>=0 ){ in proxyTakeConch()
7479 robust_close(pFile, pFile->h, __LINE__); in proxyTakeConch()
7481 pFile->h = -1; in proxyTakeConch()
7482 fd = robust_open(pCtx->dbPath, pFile->openFlags, 0); in proxyTakeConch()
7485 pFile->h = fd; in proxyTakeConch()
7536 static int proxyReleaseConch(unixFile *pFile){ in proxyReleaseConch() argument
7541 pCtx = (proxyLockingContext *)pFile->lockingContext; in proxyReleaseConch()
7603 static int switchLockProxyPath(unixFile *pFile, const char *path) { in switchLockProxyPath() argument
7604 proxyLockingContext *pCtx = (proxyLockingContext*)pFile->lockingContext; in switchLockProxyPath()
7608 if( pFile->eFileLock!=NO_LOCK ){ in switchLockProxyPath()
7639 static int proxyGetDbPathForUnixFile(unixFile *pFile, char *dbPath){ in proxyGetDbPathForUnixFile() argument
7641 if( pFile->pMethod == &afpIoMethods ){ in proxyGetDbPathForUnixFile()
7644 assert( (int)strlen((char*)pFile->lockingContext)<=MAXPATHLEN ); in proxyGetDbPathForUnixFile()
7645 strlcpy(dbPath, ((afpLockingContext *)pFile->lockingContext)->dbPath, in proxyGetDbPathForUnixFile()
7649 if( pFile->pMethod == &dotlockIoMethods ){ in proxyGetDbPathForUnixFile()
7652 int len = strlen((char *)pFile->lockingContext) - strlen(DOTLOCK_SUFFIX); in proxyGetDbPathForUnixFile()
7653 memcpy(dbPath, (char *)pFile->lockingContext, len + 1); in proxyGetDbPathForUnixFile()
7656 assert( strlen((char*)pFile->lockingContext)<=MAXPATHLEN ); in proxyGetDbPathForUnixFile()
7657 strlcpy(dbPath, (char *)pFile->lockingContext, MAXPATHLEN); in proxyGetDbPathForUnixFile()
7670 static int proxyTransformUnixFile(unixFile *pFile, const char *path) { in proxyTransformUnixFile() argument
7676 if( pFile->eFileLock!=NO_LOCK ){ in proxyTransformUnixFile()
7679 proxyGetDbPathForUnixFile(pFile, dbPath); in proxyTransformUnixFile()
7686 OSTRACE(("TRANSPROXY %d for %s pid=%d\n", pFile->h, in proxyTransformUnixFile()
7698 if( rc==SQLITE_CANTOPEN && ((pFile->openFlags&O_RDWR) == 0) ){ in proxyTransformUnixFile()
7734 pCtx->oldLockingContext = pFile->lockingContext; in proxyTransformUnixFile()
7735 pFile->lockingContext = pCtx; in proxyTransformUnixFile()
7736 pCtx->pOldMethod = pFile->pMethod; in proxyTransformUnixFile()
7737 pFile->pMethod = &proxyIoMethods; in proxyTransformUnixFile()
7747 OSTRACE(("TRANSPROXY %d %s\n", pFile->h, in proxyTransformUnixFile()
7760 unixFile *pFile = (unixFile*)id; in proxyFileControl() local
7761 if( pFile->pMethod == &proxyIoMethods ){ in proxyFileControl()
7762 proxyLockingContext *pCtx = (proxyLockingContext*)pFile->lockingContext; in proxyFileControl()
7763 proxyTakeConch(pFile); in proxyFileControl()
7775 unixFile *pFile = (unixFile*)id; in proxyFileControl() local
7777 int isProxyStyle = (pFile->pMethod == &proxyIoMethods); in proxyFileControl()
7793 (proxyLockingContext*)pFile->lockingContext; in proxyFileControl()
7800 rc = switchLockProxyPath(pFile, proxyPath); in proxyFileControl()
7804 rc = proxyTransformUnixFile(pFile, proxyPath); in proxyFileControl()
7831 unixFile *pFile = (unixFile*)id; in proxyCheckReservedLock() local
7832 int rc = proxyTakeConch(pFile); in proxyCheckReservedLock()
7834 proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; in proxyCheckReservedLock()
7870 unixFile *pFile = (unixFile*)id; in proxyLock() local
7871 int rc = proxyTakeConch(pFile); in proxyLock()
7873 proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; in proxyLock()
7877 pFile->eFileLock = proxy->eFileLock; in proxyLock()
7894 unixFile *pFile = (unixFile*)id; in proxyUnlock() local
7895 int rc = proxyTakeConch(pFile); in proxyUnlock()
7897 proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; in proxyUnlock()
7901 pFile->eFileLock = proxy->eFileLock; in proxyUnlock()
7914 unixFile *pFile = (unixFile*)id; in proxyClose() local
7915 proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; in proxyClose()
7930 rc = proxyReleaseConch(pFile); in proxyClose()
7941 pFile->lockingContext = pCtx->oldLockingContext; in proxyClose()
7942 pFile->pMethod = pCtx->pOldMethod; in proxyClose()
7944 return pFile->pMethod->xClose(id); in proxyClose()