Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Use C-sylte comments exclusively, never C++ comments. Ticket #2406. (CVS 4052) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
8f5b789fea23d76128c10b37158de252 |
User & Date: | drh 2007-06-08 18:27:03.000 |
Context
2007-06-09
| ||
09:53 | Documentation updates, in particular in the new limits.html file is added. (CVS 4053) (check-in: 4ca6cdae94 user: drh tags: trunk) | |
2007-06-08
| ||
18:27 | Use C-sylte comments exclusively, never C++ comments. Ticket #2406. (CVS 4052) (check-in: 8f5b789fea user: drh tags: trunk) | |
08:43 | Additional test cases for comparisons against NULL in the WHERE clause and elsewhere in a SELECT. (CVS 4051) (check-in: 72612a0373 user: drh tags: trunk) | |
Changes
Changes to src/os_unix.c.
︙ | ︙ | |||
615 616 617 618 619 620 621 | if(!strcmp(fsInfo.f_fstypename, "msdos")) return dotlockLockingStyle; if(!strcmp(fsInfo.f_fstypename, "webdav")) return unsupportedLockingStyle; return sqlite3TestLockingStyle(filePath, fd); | | | 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 | if(!strcmp(fsInfo.f_fstypename, "msdos")) return dotlockLockingStyle; if(!strcmp(fsInfo.f_fstypename, "webdav")) return unsupportedLockingStyle; return sqlite3TestLockingStyle(filePath, fd); #endif /* SQLITE_FIXED_LOCKING_STYLE */ } #endif /* SQLITE_ENABLE_LOCKING_STYLE */ /* ** Given a file descriptor, locate lockInfo and openCnt structures that ** describes that file descriptor. Create new ones if necessary. The |
︙ | ︙ | |||
1729 1730 1731 1732 1733 1734 1735 | pb.fd = fd; OSTRACE5("AFPLOCK setting lock %s for %d in range %llx:%llx\n", (setLockFlag?"ON":"OFF"), fd, offset, length); err = fsctl(path, afpfsByteRangeLock2FSCTL, &pb, 0); if ( err==-1 ) { OSTRACE4("AFPLOCK failed to fsctl() '%s' %d %s\n", path, errno, strerror(errno)); | | | 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 | pb.fd = fd; OSTRACE5("AFPLOCK setting lock %s for %d in range %llx:%llx\n", (setLockFlag?"ON":"OFF"), fd, offset, length); err = fsctl(path, afpfsByteRangeLock2FSCTL, &pb, 0); if ( err==-1 ) { OSTRACE4("AFPLOCK failed to fsctl() '%s' %d %s\n", path, errno, strerror(errno)); return 1; /* error */ } else { return 0; } } /* ** This routine checks if there is a RESERVED lock held on the specified |
︙ | ︙ | |||
1756 1757 1758 1759 1760 1761 1762 | if( pFile->locktype>SHARED_LOCK ){ r = 1; } /* Otherwise see if some other process holds it. */ if ( !r ) { | | | 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 | if( pFile->locktype>SHARED_LOCK ){ r = 1; } /* Otherwise see if some other process holds it. */ if ( !r ) { /* lock the byte */ int failed = _AFPFSSetLock(context->filePath, pFile->h, RESERVED_BYTE, 1,1); if (failed) { /* if we failed to get the lock then someone else must have it */ r = 1; } else { /* if we succeeded in taking the reserved lock, unlock it to restore ** the original state */ |
︙ | ︙ | |||
2011 2012 2013 2014 2015 2016 2017 | */ typedef void flockLockingContext; static int flockUnixCheckReservedLock(OsFile *id) { unixFile *pFile = (unixFile*)id; if (pFile->locktype == RESERVED_LOCK) { | | | | | | | | | | | | | | | 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 | */ typedef void flockLockingContext; static int flockUnixCheckReservedLock(OsFile *id) { unixFile *pFile = (unixFile*)id; if (pFile->locktype == RESERVED_LOCK) { return 1; /* already have a reserved lock */ } else { /* attempt to get the lock */ int rc = flock(pFile->h, LOCK_EX | LOCK_NB); if (!rc) { /* got the lock, unlock it */ flock(pFile->h, LOCK_UN); return 0; /* no one has it reserved */ } return 1; /* someone else might have it reserved */ } } static int flockUnixLock(OsFile *id, int locktype) { unixFile *pFile = (unixFile*)id; /* if we already have a lock, it is exclusive. ** Just adjust level and punt on outta here. */ if (pFile->locktype > NO_LOCK) { pFile->locktype = locktype; return SQLITE_OK; } /* grab an exclusive lock */ int rc = flock(pFile->h, LOCK_EX | LOCK_NB); if (rc) { /* didn't get, must be busy */ return SQLITE_BUSY; } else { /* got it, set the type and return ok */ pFile->locktype = locktype; return SQLITE_OK; } } static int flockUnixUnlock(OsFile *id, int locktype) { unixFile *pFile = (unixFile*)id; assert( locktype<=SHARED_LOCK ); /* no-op if possible */ if( pFile->locktype==locktype ){ return SQLITE_OK; } /* shared can just be set because we always have an exclusive */ if (locktype==SHARED_LOCK) { pFile->locktype = locktype; return SQLITE_OK; } /* no, really, unlock. */ int rc = flock(pFile->h, LOCK_UN); if (rc) return SQLITE_IOERR_UNLOCK; else { pFile->locktype = NO_LOCK; return SQLITE_OK; } |
︙ | ︙ | |||
2113 2114 2115 2116 2117 2118 2119 | static int dotlockUnixCheckReservedLock(OsFile *id) { unixFile *pFile = (unixFile*)id; dotlockLockingContext *context = (dotlockLockingContext *) pFile->lockingContext; if (pFile->locktype == RESERVED_LOCK) { | | | | | | | | | | | | | | | 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 | static int dotlockUnixCheckReservedLock(OsFile *id) { unixFile *pFile = (unixFile*)id; dotlockLockingContext *context = (dotlockLockingContext *) pFile->lockingContext; if (pFile->locktype == RESERVED_LOCK) { return 1; /* already have a reserved lock */ } else { struct stat statBuf; if (lstat(context->lockPath,&statBuf) == 0) /* file exists, someone else has the lock */ return 1; else /* file does not exist, we could have it if we want it */ return 0; } } static int dotlockUnixLock(OsFile *id, int locktype) { unixFile *pFile = (unixFile*)id; dotlockLockingContext *context = (dotlockLockingContext *) pFile->lockingContext; /* if we already have a lock, it is exclusive. ** Just adjust level and punt on outta here. */ if (pFile->locktype > NO_LOCK) { pFile->locktype = locktype; /* Always update the timestamp on the old file */ utimes(context->lockPath,NULL); return SQLITE_OK; } /* check to see if lock file already exists */ struct stat statBuf; if (lstat(context->lockPath,&statBuf) == 0){ return SQLITE_BUSY; /* it does, busy */ } /* grab an exclusive lock */ int fd = open(context->lockPath,O_RDONLY|O_CREAT|O_EXCL,0600); if (fd < 0) { /* failed to open/create the file, someone else may have stolen the lock */ return SQLITE_BUSY; } close(fd); /* got it, set the type and return ok */ pFile->locktype = locktype; return SQLITE_OK; } static int dotlockUnixUnlock(OsFile *id, int locktype) { unixFile *pFile = (unixFile*)id; dotlockLockingContext *context = (dotlockLockingContext *) pFile->lockingContext; assert( locktype<=SHARED_LOCK ); /* no-op if possible */ if( pFile->locktype==locktype ){ return SQLITE_OK; } /* shared can just be set because we always have an exclusive */ if (locktype==SHARED_LOCK) { pFile->locktype = locktype; return SQLITE_OK; } /* no, really, unlock. */ unlink(context->lockPath); pFile->locktype = NO_LOCK; return SQLITE_OK; } /* ** Close a file. |
︙ | ︙ | |||
2492 2493 2494 2495 2496 2497 2498 | sqlite3OsLeaveMutex(); if( rc ){ close(h); unlink(zFilename); return SQLITE_NOMEM; } } else { | | | 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 | sqlite3OsLeaveMutex(); if( rc ){ close(h); unlink(zFilename); return SQLITE_NOMEM; } } else { /* pLock and pOpen are only used for posix advisory locking */ f.pLock = NULL; f.pOpen = NULL; } if( delFlag ){ unlink(zFilename); } f.dirfd = -1; |
︙ | ︙ |