Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add source code to the "showlocks" utility program in the tool/ subdirectory. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
6868cc66d2be67b7f03776c982962ffa |
User & Date: | drh 2015-04-03 18:33:40.031 |
Context
2015-04-03
| ||
20:33 | Disable the SQLITE_FCNTL_WAL_BLOCK feature for now. It needs more work and is not yet ready for release. (check-in: 4ae9a3acc4 user: drh tags: trunk) | |
18:33 | Add source code to the "showlocks" utility program in the tool/ subdirectory. (check-in: 6868cc66d2 user: drh tags: trunk) | |
2015-04-02
| ||
15:24 | Disable e_walauto.test on OpenBSD, as it requires a coherent cache. (check-in: 9070122708 user: dan tags: trunk) | |
Changes
Added tool/showlocks.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | /* ** This file implements a simple command-line utility that shows all of the ** Posix Advisory Locks on a file. ** ** Usage: ** ** showlocks FILENAME ** ** To compile: gcc -o showlocks showlocks.c */ #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <stdlib.h> #include <string.h> /* This utility only looks for locks in the first 2 billion bytes */ #define MX_LCK 2147483647 /* ** Print all locks on the inode of "fd" that occur in between ** lwr and upr, inclusive. */ static int showLocksInRange(int fd, off_t lwr, off_t upr){ int cnt = 0; struct flock x; x.l_type = F_WRLCK; x.l_whence = SEEK_SET; x.l_start = lwr; x.l_len = upr-lwr; fcntl(fd, F_GETLK, &x); if( x.l_type==F_UNLCK ) return 0; printf("start: %-12d len: %-5d pid: %-5d type: %s\n", (int)x.l_start, (int)x.l_len, x.l_pid, x.l_type==F_WRLCK ? "WRLCK" : "RDLCK"); cnt++; if( x.l_start>lwr ){ cnt += showLocksInRange(fd, lwr, x.l_start-1); } if( x.l_start+x.l_len<upr ){ cnt += showLocksInRange(fd, x.l_start+x.l_len+1, upr); } return cnt; } int main(int argc, char **argv){ int fd; int cnt; if( argc!=2 ){ fprintf(stderr, "Usage: %s FILENAME\n", argv[0]); return 1; } fd = open(argv[1], O_RDWR, 0); if( fd<0 ){ fprintf(stderr, "%s: cannot open %s\n", argv[0], argv[1]); return 1; } cnt = showLocksInRange(fd, 0, MX_LCK); if( cnt==0 ) printf("no locks\n"); close(fd); return 0; } |