| Index: third_party/sqlite/sqlite-src-3100200/tool/showlocks.c
|
| diff --git a/third_party/sqlite/sqlite-src-3100200/tool/showlocks.c b/third_party/sqlite/sqlite-src-3100200/tool/showlocks.c
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..752c535cc3719047f85cbea6da0f8741aae42712
|
| --- /dev/null
|
| +++ b/third_party/sqlite/sqlite-src-3100200/tool/showlocks.c
|
| @@ -0,0 +1,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;
|
| +}
|
|
|