rjeczalik / notify

File system event notification library on steroids.
MIT License
902 stars 128 forks source link

Recursive watches do not work on OpenBSD #172

Open AudriusButkevicius opened 5 years ago

AudriusButkevicius commented 5 years ago

On OpenBSD:

syncthing$ notify &
syncthing$ mkdir -p a/b/c/d
syncthing$ 2019/01/15 20:49:50 received notify.Create: "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a"

On Windows:

/cygdrive/c/Gohome/src/github.com/syncthing/syncthing/lib/fs/test $ notify &
/cygdrive/c/Gohome/src/github.com/syncthing/syncthing/lib/fs/test $ mkdir -p a/b/c
2019/01/15 20:40:51 received notify.Create: "C:\Gohome\src\github.com\syncthing\syncthing\lib\fs\test\a"
2019/01/15 20:40:51 received notify.Create: "C:\Gohome\src\github.com\syncthing\syncthing\lib\fs\test\a\b"
2019/01/15 20:40:51 received notify.Create: "C:\Gohome\src\github.com\syncthing\syncthing\lib\fs\test\a\b\c"

Yet removals work fine (even tho out of order and not sure perhaps the walk and unlink is done by rm?)

syncthing$ rm -rf a
2019/01/15 20:58:14 received notify.Remove: "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a"
2019/01/15 20:58:14 received notify.Remove: "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a/b/c"
2019/01/15 20:58:14 received notify.Remove: "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a/b"

On Windows:

/cygdrive/c/Gohome/src/github.com/syncthing/syncthing/lib/fs/test (quic) $ rm -rf a
2019/01/15 20:41:33 received notify.Remove: "C:\Gohome\src\github.com\syncthing\syncthing\lib\fs\test\a\b\c"
2019/01/15 20:41:33 received notify.Remove: "C:\Gohome\src\github.com\syncthing\syncthing\lib\fs\test\a\b"
2019/01/15 20:41:33 received notify.Remove: "C:\Gohome\src\github.com\syncthing\syncthing\lib\fs\test\a"

ktrace does seem to report recursive events however:

ktrace output

``` 47075 ktrace RET ktrace 0 47075 ktrace CALL execve(0x7f7fffff6430,0x7f7fffff6310,0x7f7fffff6320) 47075 ktrace NAMI "/home/syncthing/go/bin/notify" 47075 ktrace ARGS [0] = "/home/syncthing/go/bin/notify" 47075 notify RET execve 0 47075 notify CALL __set_tcb(0x6769d0) 47075 notify RET __set_tcb 0 47075 notify CALL sysctl(6.3,0x7f7fffff4914,0x7f7fffff4918,0,0) 47075 notify RET sysctl 0 47075 notify CALL sysctl(6.7,0x7f7fffff4914,0x7f7fffff4918,0,0) 47075 notify RET sysctl 0 47075 notify CALL sysctl(1.3,0x7f7fffff4914,0x7f7fffff4918,0,0) 47075 notify RET sysctl 0 47075 notify CALL mmap(0,0x40000,0x3,0x1002,-1,0) 47075 notify RET mmap 12451319808/0x2e6281000 47075 notify CALL mmap(0xc000000000,0x4000000,0,0x1002,-1,0) 47075 notify RET mmap 824633720832/0xc000000000 47075 notify CALL mmap(0xc000000000,0x4000000,0x3,0x1012,-1,0) 47075 notify RET mmap 824633720832/0xc000000000 47075 notify CALL mmap(0,0x2000000,0x3,0x1002,-1,0) 47075 notify RET mmap 11399319552/0x2a773d000 47075 notify CALL mmap(0,0x210000,0x3,0x1002,-1,0) 47075 notify RET mmap 12455804928/0x2e66c8000 47075 notify CALL mmap(0,0x10000,0x3,0x1002,-1,0) 47075 notify RET mmap 12598685696/0x2eef0b000 47075 notify CALL clock_gettime(CLOCK_MONOTONIC,0x7f7fffff44b0) 47075 notify STRU struct timespec { 290052.605140482 } 47075 notify RET clock_gettime 0 47075 notify CALL mmap(0,0x10000,0x3,0x1002,-1,0) 47075 notify RET mmap 11365122048/0x2a56a0000 47075 notify CALL mmap(0xc000002000,0x8000,0x3,0x5012,-1,0) 47075 notify RET mmap 824633729024/0xc000002000 47075 notify CALL open(0x6604b0,0) 47075 notify NAMI "/dev/urandom" 47075 notify RET open 3 47075 notify CALL read(3,0x692460,0x20) 47075 notify GIO fd 3 read 32 bytes "v@\M-k#\^XO\M-p\^D\M-!\M->\M-)\M-y\M-2\0\M-_\^V\M-$\M-76\M^_\M-:2a\M-f\M^[\^[\0\M-5X"9\M-Y" 47075 notify RET read 32/0x20 47075 notify CALL close(3) 47075 notify RET close 0 47075 notify CALL sigprocmask(SIG_SETMASK,0<>) 47075 notify RET sigprocmask 0<> 47075 notify CALL clock_gettime(CLOCK_MONOTONIC,0x7f7fffff48f8) 47075 notify STRU struct timespec { 290052.605414549 } 47075 notify RET clock_gettime 0 47075 notify CALL clock_gettime(CLOCK_MONOTONIC,0x7f7fffff4840) 47075 notify STRU struct timespec { 290052.605419956 } 47075 notify RET clock_gettime 0 47075 notify CALL mmap(0xc00002c000,0x8000,0x3,0x5012,-1,0) 47075 notify RET mmap 824633901056/0xc00002c000 47075 notify CALL sigaltstack(0,0x7f7fffff48e0) 47075 notify RET sigaltstack 0 47075 notify CALL sigaltstack(0x7f7fffff48a8,0) 47075 notify RET sigaltstack 0 47075 notify CALL sigprocmask(SIG_SETMASK,0<>) 47075 notify RET sigprocmask 0<> 47075 notify CALL sigaction(SIGHUP,0,0x7f7fffff48b8) 47075 notify STRU struct sigaction { handler=SIG_DFL, mask=0<>, flags=0<> } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGHUP,0x7f7fffff4898,0) 47075 notify STRU struct sigaction { sigaction=0x455c30, mask=~0<>, flags=0x43 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGINT,0,0x7f7fffff48b8) 47075 notify STRU struct sigaction { handler=SIG_DFL, mask=0<>, flags=0<> } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGINT,0x7f7fffff4898,0) 47075 notify STRU struct sigaction { sigaction=0x455c30, mask=~0<>, flags=0x43 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGQUIT,0,0x7f7fffff48b8) 47075 notify STRU struct sigaction { handler=SIG_DFL, mask=0<>, flags=0<> } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGQUIT,0x7f7fffff4898,0) 47075 notify STRU struct sigaction { sigaction=0x455c30, mask=~0<>, flags=0x43 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGILL,0,0x7f7fffff48b8) 47075 notify STRU struct sigaction { handler=SIG_DFL, mask=~0x80010108, flags=0<> } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGILL,0x7f7fffff4898,0) 47075 notify STRU struct sigaction { sigaction=0x455c30, mask=~0<>, flags=0x43 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGTRAP,0,0x7f7fffff48b8) 47075 notify STRU struct sigaction { handler=SIG_DFL, mask=0<>, flags=0x12 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGTRAP,0x7f7fffff4898,0) 47075 notify STRU struct sigaction { sigaction=0x455c30, mask=~0<>, flags=0x43 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGABRT,0,0x7f7fffff48b8) 47075 notify STRU struct sigaction { handler=SIG_DFL, mask=~0x80010120, flags=0<> } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGABRT,0x7f7fffff4898,0) 47075 notify STRU struct sigaction { sigaction=0x455c30, mask=~0<>, flags=0x43 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGEMT,0,0x7f7fffff48b8) 47075 notify STRU struct sigaction { handler=SIG_DFL, mask=0<>, flags=0x12 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGEMT,0x7f7fffff4898,0) 47075 notify STRU struct sigaction { sigaction=0x455c30, mask=~0<>, flags=0x43 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGFPE,0,0x7f7fffff48b8) 47075 notify STRU struct sigaction { handler=SIG_DFL, mask=~0x80010180, flags=0<> } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGFPE,0x7f7fffff4898,0) 47075 notify STRU struct sigaction { sigaction=0x455c30, mask=~0<>, flags=0x43 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGBUS,0,0x7f7fffff48b8) 47075 notify STRU struct sigaction { handler=SIG_DFL, mask=~0x80010300, flags=0<> } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGBUS,0x7f7fffff4898,0) 47075 notify STRU struct sigaction { sigaction=0x455c30, mask=~0<>, flags=0x43 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGSEGV,0,0x7f7fffff48b8) 47075 notify STRU struct sigaction { handler=SIG_DFL, mask=~0x80010500, flags=0<> } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGSEGV,0x7f7fffff4898,0) 47075 notify STRU struct sigaction { sigaction=0x455c30, mask=~0<>, flags=0x43 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGSYS,0,0x7f7fffff48b8) 47075 notify STRU struct sigaction { handler=SIG_DFL, mask=0<>, flags=0x2 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGSYS,0x7f7fffff4898,0) 47075 notify STRU struct sigaction { sigaction=0x455c30, mask=~0<>, flags=0x43 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGPIPE,0,0x7f7fffff48b8) 47075 notify STRU struct sigaction { handler=SIG_DFL, mask=0<>, flags=0x2 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGPIPE,0x7f7fffff4898,0) 47075 notify STRU struct sigaction { sigaction=0x455c30, mask=~0<>, flags=0x43 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGALRM,0,0x7f7fffff48b8) 47075 notify STRU struct sigaction { handler=SIG_DFL, mask=0<>, flags=0<> } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGALRM,0x7f7fffff4898,0) 47075 notify STRU struct sigaction { sigaction=0x455c30, mask=~0<>, flags=0x43 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGTERM,0,0x7f7fffff48b8) 47075 notify STRU struct sigaction { handler=SIG_DFL, mask=0<>, flags=0<> } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGTERM,0x7f7fffff4898,0) 47075 notify STRU struct sigaction { sigaction=0x455c30, mask=~0<>, flags=0x43 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGURG,0,0x7f7fffff48b8) 47075 notify STRU struct sigaction { handler=SIG_DFL, mask=0<>, flags=0x12 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGURG,0x7f7fffff4898,0) 47075 notify STRU struct sigaction { sigaction=0x455c30, mask=~0<>, flags=0x43 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGCHLD,0,0x7f7fffff48b8) 47075 notify STRU struct sigaction { handler=SIG_DFL, mask=0<>, flags=0<> } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGCHLD,0x7f7fffff4898,0) 47075 notify STRU struct sigaction { sigaction=0x455c30, mask=~0<>, flags=0x43 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGIO,0,0x7f7fffff48b8) 47075 notify STRU struct sigaction { handler=SIG_DFL, mask=0<>, flags=0x12 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGIO,0x7f7fffff4898,0) 47075 notify STRU struct sigaction { sigaction=0x455c30, mask=~0<>, flags=0x43 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGXCPU,0,0x7f7fffff48b8) 47075 notify STRU struct sigaction { handler=SIG_DFL, mask=~0x80810100, flags=0<> } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGXCPU,0x7f7fffff4898,0) 47075 notify STRU struct sigaction { sigaction=0x455c30, mask=~0<>, flags=0x43 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGXFSZ,0,0x7f7fffff48b8) 47075 notify STRU struct sigaction { handler=SIG_DFL, mask=~0x81010100, flags=0<> } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGXFSZ,0x7f7fffff4898,0) 47075 notify STRU struct sigaction { sigaction=0x455c30, mask=~0<>, flags=0x43 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGVTALRM,0,0x7f7fffff48b8) 47075 notify STRU struct sigaction { handler=SIG_DFL, mask=0<>, flags=0x12 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGVTALRM,0x7f7fffff4898,0) 47075 notify STRU struct sigaction { sigaction=0x455c30, mask=~0<>, flags=0x43 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGPROF,0,0x7f7fffff48b8) 47075 notify STRU struct sigaction { handler=SIG_DFL, mask=0<>, flags=0x12 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGPROF,0x7f7fffff4898,0) 47075 notify STRU struct sigaction { sigaction=0x455c30, mask=~0<>, flags=0x43 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGWINCH,0,0x7f7fffff48b8) 47075 notify STRU struct sigaction { handler=SIG_DFL, mask=0<>, flags=0<> } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGWINCH,0x7f7fffff4898,0) 47075 notify STRU struct sigaction { sigaction=0x455c30, mask=~0<>, flags=0x43 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGINFO,0,0x7f7fffff48b8) 47075 notify STRU struct sigaction { handler=SIG_DFL, mask=0<>, flags=0x12 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGINFO,0x7f7fffff4898,0) 47075 notify STRU struct sigaction { sigaction=0x455c30, mask=~0<>, flags=0x43 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGUSR1,0,0x7f7fffff48b8) 47075 notify STRU struct sigaction { handler=SIG_DFL, mask=~0xa0010100, flags=0<> } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGUSR1,0x7f7fffff4898,0) 47075 notify STRU struct sigaction { sigaction=0x455c30, mask=~0<>, flags=0x43 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGUSR2,0,0x7f7fffff48b8) 47075 notify STRU struct sigaction { handler=SIG_DFL, mask=~0xc0010100, flags=0<> } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGUSR2,0x7f7fffff4898,0) 47075 notify STRU struct sigaction { sigaction=0x455c30, mask=~0<>, flags=0x43 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGTHR,0,0x7f7fffff48b8) 47075 notify STRU struct sigaction { handler=SIG_DFL, mask=0<>, flags=0x12 } 47075 notify RET sigaction 0 47075 notify CALL sigaction(SIGTHR,0x7f7fffff4898,0) 47075 notify STRU struct sigaction { sigaction=0x455c30, mask=~0<>, flags=0x43 } 47075 notify RET sigaction 0 47075 notify CALL mmap(0xc000036000,0x8000,0x3,0x5012,-1,0) 47075 notify RET mmap 824633942016/0xc000036000 47075 notify CALL mmap(0xc00003e000,0x8000,0x3,0x5012,-1,0) 47075 notify RET mmap 824633974784/0xc00003e000 47075 notify CALL sigprocmask(SIG_SETMASK,~0<>) 47075 notify RET sigprocmask 0<> 47075 notify CALL __tfork(0x7f7fffff4888,24) 47075 notify STRU struct __tfork { tcb=0xc000034088, tid=0xc000034048, stack=0xc000043ff8 } 47075 notify RET __tfork 121009/0x1d8b1 47075 notify CALL sigprocmask(SIG_SETMASK,0<>) 47075 notify RET sigprocmask ~0x10100 47075 notify CALL clock_gettime(CLOCK_MONOTONIC,0xc000030750) 47075 notify STRU struct timespec { 290052.605850148 } 47075 notify RET clock_gettime 0 47075 notify CALL clock_gettime(CLOCK_MONOTONIC,0xc000030778) 47075 notify STRU struct timespec { 290052.605859768 } 47075 notify RET clock_gettime 0 47075 notify CALL clock_gettime(CLOCK_MONOTONIC,0xc000030778) 47075 notify STRU struct timespec { 290052.605878013 } 47075 notify RET clock_gettime 0 47075 notify CALL mmap(0xc00004a000,0x8000,0x3,0x5012,-1,0) 47075 notify RET mmap 824634023936/0xc00004a000 47075 notify CALL sigprocmask(SIG_SETMASK,~0<>) 47075 notify RET sigprocmask 0<> 47075 notify CALL __tfork(0x7f7fffff47a0,24) 47075 notify STRU struct __tfork { tcb=0xc000034408, tid=0xc0000343c8, stack=0xc000045ff8 } 47075 notify RET __tfork 246140/0x3c17c 47075 notify CALL sigprocmask(SIG_SETMASK,0<>) 47075 notify RET sigprocmask ~0x10100 47075 notify CALL __thrsleep(0x676c78,CLOCK_MONOTONIC,0,0,0x676c78) 47075 notify RET __tfork 0 47075 notify CALL __set_tcb(0xc000034090) 47075 notify RET __set_tcb 0 47075 notify CALL sigaltstack(0,0xc000043f58) 47075 notify RET sigaltstack 0 47075 notify CALL sigaltstack(0xc000043f20,0) 47075 notify RET sigaltstack 0 47075 notify CALL sigprocmask(SIG_SETMASK,0<>) 47075 notify RET sigprocmask ~0x10100 47075 notify CALL clock_gettime(CLOCK_MONOTONIC,0xc000043f00) 47075 notify STRU struct timespec { 290052.605979277 } 47075 notify RET clock_gettime 0 47075 notify CALL nanosleep(0xc000043f00,0) 47075 notify STRU struct timespec { 0.000020000 } 47075 notify RET __tfork 0 47075 notify CALL __set_tcb(0xc000034410) 47075 notify RET __set_tcb 0 47075 notify CALL sigaltstack(0,0xc000045f58) 47075 notify RET sigaltstack 0 47075 notify CALL sigaltstack(0xc000045f20,0) 47075 notify RET sigaltstack 0 47075 notify CALL sigprocmask(SIG_SETMASK,0<>) 47075 notify RET sigprocmask ~0x10100 47075 notify CALL __thrwakeup(0x676c78,1) 47075 notify RET __thrwakeup 0 47075 notify CALL __thrsleep(0xc0000346b8,CLOCK_MONOTONIC,0,0,0xc0000346b8) 47075 notify RET __thrsleep 0 47075 notify CALL stat(0xc000016048,0xc00005e038) 47075 notify NAMI "." 47075 notify STRU struct stat { dev=1024, ino=1690237, mode=drwxr-xr-x , nlink=2, uid=1000<"syncthing">, gid=1000<"syncthing">, rdev=6745462, atime=1547585894<"Jan 15 20:58:14 2019">.924924365, mtime=1547585894<"Jan 15 20:58:14 2019">.924924365, ctime=1547585894<"Jan 15 20:58:14 2019">.924924365, size=512, blocks=4, blksize=16384, flags=0x0, gen=0x0 } 47075 notify RET stat 0 47075 notify CALL mmap(0xc000060000,0x8000,0x3,0x5012,-1,0) 47075 notify RET mmap 824634114048/0xc000060000 47075 notify CALL stat(0xc0000140a0,0xc00005e0f8) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test" 47075 notify STRU struct stat { dev=1024, ino=1690237, mode=drwxr-xr-x , nlink=2, uid=1000<"syncthing">, gid=1000<"syncthing">, rdev=6745462, atime=1547585894<"Jan 15 20:58:14 2019">.924924365, mtime=1547585894<"Jan 15 20:58:14 2019">.924924365, ctime=1547585894<"Jan 15 20:58:14 2019">.924924365, size=512, blocks=4, blksize=16384, flags=0x0, gen=0x0 } 47075 notify RET stat 0 47075 notify CALL fcntl(0,F_GETFL) 47075 notify RET fcntl 2 47075 notify CALL mmap(0,0x40000,0x3,0x1002,-1,0) 47075 notify RET mmap 9880813568/0x24cf14000 47075 notify CALL fcntl(1,F_GETFL) 47075 notify RET fcntl 2 47075 notify CALL fcntl(2,F_GETFL) 47075 notify RET fcntl 2 47075 notify CALL kqueue() 47075 notify RET kqueue 3 47075 notify CALL pipe2(0xc000064d00,0<>) 47075 notify STRU int [2] { 4, 5 } 47075 notify RET pipe2 0 47075 notify CALL kevent(3,0xc000064dc0,1,0,0,0) 47075 notify STRU struct kevent { ident=4, filter=EVFILT_READ, flags=0x1, fflags=0<>, data=0, udata=0x0 } 47075 notify RET kevent 0 47075 notify CALL stat(0xc0000160e0,0xc00005e1b8) 47075 notify NAMI "." 47075 notify STRU struct stat { dev=1024, ino=1690237, mode=drwxr-xr-x , nlink=2, uid=1000<"syncthing">, gid=1000<"syncthing">, rdev=6745462, atime=1547585894<"Jan 15 20:58:14 2019">.924924365, mtime=1547585894<"Jan 15 20:58:14 2019">.924924365, ctime=1547585894<"Jan 15 20:58:14 2019">.924924365, size=512, blocks=4, blksize=16384, flags=0x0, gen=0x0 } 47075 notify RET stat 0 47075 notify CALL stat(0xc0000142d0,0xc00005e278) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test" 47075 notify STRU struct stat { dev=1024, ino=1690237, mode=drwxr-xr-x , nlink=2, uid=1000<"syncthing">, gid=1000<"syncthing">, rdev=6745462, atime=1547585894<"Jan 15 20:58:14 2019">.924924365, mtime=1547585894<"Jan 15 20:58:14 2019">.924924365, ctime=1547585894<"Jan 15 20:58:14 2019">.924924365, size=512, blocks=4, blksize=16384, flags=0x0, gen=0x0 } 47075 notify RET stat 0 47075 notify CALL lstat(0xc0000160e2,0xc00005e338) 47075 notify NAMI "/home" 47075 notify STRU struct stat { dev=1024, ino=1585024, mode=drwxr-xr-x , nlink=3, uid=0<"root">, gid=0<"wheel">, rdev=6325152, atime=1547515849<"Jan 15 01:30:49 2019">.102087046, mtime=1547141256<"Jan 10 17:27:36 2019">.589822843, ctime=1547141256<"Jan 10 17:27:36 2019">.589822843, size=512, blocks=4, blksize=16384, flags=0x0, gen=0x0 } 47075 notify RET lstat 0 47075 notify CALL lstat(0xc0000160f0,0xc00005e3f8) 47075 notify NAMI "/home/syncthing" 47075 notify STRU struct stat { dev=1024, ino=1585025, mode=drwxr-xr-x , nlink=6, uid=1000<"syncthing">, gid=1000<"syncthing">, rdev=6325153, atime=1547584466<"Jan 15 20:34:26 2019">.655680246, mtime=1547240872<"Jan 11 21:07:52 2019">.845161470, ctime=1547241039<"Jan 11 21:10:39 2019">.875537577, size=512, blocks=4, blksize=16384, flags=0x0, gen=0x0 } 47075 notify RET lstat 0 47075 notify CALL lstat(0xc0000121a0,0xc00005e4b8) 47075 notify NAMI "/home/syncthing/go" 47075 notify STRU struct stat { dev=1024, ino=1613265, mode=drwxr-xr-x , nlink=5, uid=1000<"syncthing">, gid=1000<"syncthing">, rdev=6456575, atime=1547584467<"Jan 15 20:34:27 2019">.925660360, mtime=1547298806<"Jan 12 13:13:26 2019">.760763355, ctime=1547298806<"Jan 12 13:13:26 2019">.760763355, size=512, blocks=4, blksize=16384, flags=0x0, gen=0x0 } 47075 notify RET lstat 0 47075 notify CALL lstat(0xc0000121c0,0xc00005e578) 47075 notify NAMI "/home/syncthing/go/src" 47075 notify STRU struct stat { dev=1024, ino=1613266, mode=drwxr-xr-x , nlink=3, uid=1000<"syncthing">, gid=1000<"syncthing">, rdev=6458047, atime=1547584323<"Jan 15 20:32:03 2019">.737757231, mtime=1547155761<"Jan 10 21:29:21 2019">.443356564, ctime=1547155761<"Jan 10 21:29:21 2019">.443356564, size=512, blocks=4, blksize=16384, flags=0x0, gen=0x0 } 47075 notify RET lstat 0 47075 notify CALL lstat(0xc0000180c0,0xc00005e638) 47075 notify NAMI "/home/syncthing/go/src/github.com" 47075 notify STRU struct stat { dev=1024, ino=1613267, mode=drwxr-xr-x , nlink=4, uid=1000<"syncthing">, gid=1000<"syncthing">, rdev=6456597, atime=1547584366<"Jan 15 20:32:46 2019">.157161714, mtime=1547298387<"Jan 12 13:06:27 2019">.975057631, ctime=1547298387<"Jan 12 13:06:27 2019">.975057631, size=512, blocks=4, blksize=16384, flags=0x0, gen=0x0 } 47075 notify RET lstat 0 47075 notify CALL lstat(0xc0000180f0,0xc00005e6f8) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing" 47075 notify STRU struct stat { dev=1024, ino=1613268, mode=drwxr-xr-x , nlink=4, uid=1000<"syncthing">, gid=1000<"syncthing">, rdev=6456598, atime=1547584362<"Jan 15 20:32:42 2019">.037207922, mtime=1547298601<"Jan 12 13:10:01 2019">.102694482, ctime=1547298601<"Jan 12 13:10:01 2019">.102694482, size=512, blocks=4, blksize=16384, flags=0x0, gen=0x0 } 47075 notify RET lstat 0 47075 notify CALL lstat(0xc00001c0c0,0xc00005e7b8) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing" 47075 notify STRU struct stat { dev=1024, ino=1613269, mode=drwxr-xr-x , nlink=15, uid=1000<"syncthing">, gid=1000<"syncthing">, rdev=6456599, atime=1547584339<"Jan 15 20:32:19 2019">.837502973, mtime=1547155838<"Jan 10 21:30:38 2019">.603345396, ctime=1547155838<"Jan 10 21:30:38 2019">.603345396, size=1024, blocks=4, blksize=16384, flags=0x0, gen=0x0 } 47075 notify RET lstat 0 47075 notify CALL lstat(0xc00001c100,0xc00005e878) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib" 47075 notify STRU struct stat { dev=1024, ino=1637402, mode=drwxr-xr-x , nlink=33, uid=1000<"syncthing">, gid=1000<"syncthing">, rdev=6552652, atime=1547515849<"Jan 15 01:30:49 2019">.402032146, mtime=1547155798<"Jan 10 21:29:58 2019">.513274396, ctime=1547155798<"Jan 10 21:29:58 2019">.513274396, size=1024, blocks=4, blksize=16384, flags=0x0, gen=0x0 } 47075 notify RET lstat 0 47075 notify CALL lstat(0xc00001c140,0xc00005e938) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs" 47075 notify STRU struct stat { dev=1024, ino=1637538, mode=drwxr-xr-x , nlink=4, uid=1000<"syncthing">, gid=1000<"syncthing">, rdev=6553181, atime=1547586112<"Jan 15 21:01:52 2019">.321802239, mtime=1547586131<"Jan 15 21:02:11 2019">.571505594, ctime=1547586131<"Jan 15 21:02:11 2019">.571505594, size=1536, blocks=4, blksize=16384, flags=0x0, gen=0x0 } 47075 notify RET lstat 0 47075 notify CALL lstat(0xc000014370,0xc00005e9f8) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test" 47075 notify STRU struct stat { dev=1024, ino=1690237, mode=drwxr-xr-x , nlink=2, uid=1000<"syncthing">, gid=1000<"syncthing">, rdev=6745462, atime=1547585894<"Jan 15 20:58:14 2019">.924924365, mtime=1547585894<"Jan 15 20:58:14 2019">.924924365, ctime=1547585894<"Jan 15 20:58:14 2019">.924924365, size=512, blocks=4, blksize=16384, flags=0x0, gen=0x0 } 47075 notify RET lstat 0 47075 notify CALL stat(0xc0000143c0,0xc00005eab8) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test" 47075 notify STRU struct stat { dev=1024, ino=1690237, mode=drwxr-xr-x , nlink=2, uid=1000<"syncthing">, gid=1000<"syncthing">, rdev=6745462, atime=1547585894<"Jan 15 20:58:14 2019">.924924365, mtime=1547585894<"Jan 15 20:58:14 2019">.924924365, ctime=1547585894<"Jan 15 20:58:14 2019">.924924365, size=512, blocks=4, blksize=16384, flags=0x0, gen=0x0 } 47075 notify RET stat 0 47075 notify CALL open(0xc000014410,0x4) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test" 47075 notify RET open 6 47075 notify CALL kevent(3,0xc0000648f0,1,0,0,0) 47075 notify STRU struct kevent { ident=6, filter=EVFILT_VNODE, flags=0x21, fflags=0x23, data=0, udata=0x0 } 47075 notify RET kevent 0 47075 notify CALL open(0xc000014460,0x10000) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test" 47075 notify RET open 7 47075 notify CALL kqueue() 47075 notify RET kqueue 8 47075 notify CALL fcntl(8,F_SETFD,FD_CLOEXEC) 47075 notify RET fcntl 0 47075 notify CALL kevent(8,0xc0000646c8,2,0,0,0) 47075 notify STRU struct kevent [2] { ident=7, filter=EVFILT_READ, flags=0x21, fflags=0<>, data=0, udata=0x24cf18ed0 } { ident=7, filter=EVFILT_WRITE, flags=0x21, fflags=0<>, data=0, udata=0x24cf18ed0 } 47075 notify RET kevent 0 47075 notify CALL fcntl(7,F_GETFL) 47075 notify RET fcntl 0 47075 notify CALL fcntl(7,F_SETFL,0x4) 47075 notify RET fcntl 0 47075 notify CALL getdents(7,0xc000080000,0x2000) 47075 notify RET getdents 64/0x40 47075 notify CALL getdents(7,0xc000080000,0x2000) 47075 notify RET getdents 0 47075 notify CALL close(7) 47075 notify RET close 0 47075 notify CALL open(0xc0000144b0,0x10000) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test" 47075 notify RET open 7 47075 notify CALL kevent(8,0xc000064810,2,0,0,0) 47075 notify STRU struct kevent [2] { ident=7, filter=EVFILT_READ, flags=0x21, fflags=0<>, data=0, udata=0x24cf18ed0 } { ident=7, filter=EVFILT_WRITE, flags=0x21, fflags=0<>, data=0, udata=0x24cf18ed0 } 47075 notify RET kevent 0 47075 notify CALL fcntl(7,F_GETFL) 47075 notify RET fcntl 0 47075 notify CALL fcntl(7,F_SETFL,0x4) 47075 notify RET fcntl 0 47075 notify CALL getdents(7,0xc000082000,0x2000) 47075 notify RET getdents 64/0x40 47075 notify CALL getdents(7,0xc000082000,0x2000) 47075 notify RET getdents 0 47075 notify CALL close(7) 47075 notify RET close 0 47075 notify CALL kevent(3,0,0,0xc000031f40,1,0) 47075 notify RET nanosleep 0 47075 notify CALL clock_gettime(CLOCK_MONOTONIC,0xc000043f00) 47075 notify STRU struct timespec { 290052.618550196 } 47075 notify RET clock_gettime 0 47075 notify CALL kevent(8,0,0,0xc000043710,64,0xc0000436f8) 47075 notify STRU struct timespec { 0 } 47075 notify RET kevent 0 47075 notify CALL nanosleep(0xc000043f00,0) 47075 notify STRU struct timespec { 0.000020000 } 47075 notify RET nanosleep 0 47075 notify CALL clock_gettime(CLOCK_MONOTONIC,0xc000043f00) 47075 notify STRU struct timespec { 290052.638566455 } 47075 notify RET clock_gettime 0 47075 notify CALL kevent(8,0,0,0xc000043710,64,0xc0000436f8) 47075 notify STRU struct timespec { 0 } 47075 notify RET kevent 0 47075 notify CALL __thrwakeup(0xc0000346b8,1) 47075 notify RET __thrwakeup 0 47075 notify CALL nanosleep(0xc000043f00,0) 47075 notify STRU struct timespec { 0.000020000 } 47075 notify RET __thrsleep 0 47075 notify CALL __thrsleep(0xc0000346b8,CLOCK_MONOTONIC,0,0,0xc0000346b8) 47075 notify RET nanosleep 0 47075 notify CALL clock_gettime(CLOCK_MONOTONIC,0xc000043e98) 47075 notify STRU struct timespec { 290052.658610251 } 47075 notify RET clock_gettime 0 47075 notify CALL clock_gettime(CLOCK_MONOTONIC,0xc000043e28) 47075 notify STRU struct timespec { 290052.658622179 } 47075 notify RET clock_gettime 0 47075 notify CALL __thrsleep(0xc000034338,CLOCK_MONOTONIC,0xc000043e80,0,0xc000034338) 47075 notify STRU struct timespec { 290112.658622179 } 47075 notify STRU struct kevent { ident=6, filter=EVFILT_VNODE, flags=0x21, fflags=0x12, data=0, udata=0x0 } 47075 notify RET kevent 1 47075 notify CALL __thrwakeup(0xc000034338,1) 47075 notify RET __thrwakeup 0 47075 notify CALL stat(0xc000014500,0xc00005eb78) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test" 47075 notify STRU struct stat { dev=1024, ino=1690237, mode=drwxr-xr-x , nlink=3, uid=1000<"syncthing">, gid=1000<"syncthing">, rdev=6745462, atime=1547586131<"Jan 15 21:02:11 2019">.571505594, mtime=1547586132<"Jan 15 21:02:12 2019">.581493896, ctime=1547586132<"Jan 15 21:02:12 2019">.581493896, size=512, blocks=4, blksize=16384, flags=0x0, gen=0x0 } 47075 notify RET stat 0 47075 notify CALL kevent(3,0xc000031e80,1,0,0,0) 47075 notify STRU struct kevent { ident=6, filter=EVFILT_VNODE, flags=0x21, fflags=0x23, data=0, udata=0x0 } 47075 notify RET kevent 0 47075 notify CALL open(0xc000014550,0x10000) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test" 47075 notify RET open 7 47075 notify CALL kevent(8,0xc000065a50,2,0,0,0) 47075 notify STRU struct kevent [2] { ident=7, filter=EVFILT_READ, flags=0x21, fflags=0<>, data=0, udata=0x24cf18ed0 } { ident=7, filter=EVFILT_WRITE, flags=0x21, fflags=0<>, data=0, udata=0x24cf18ed0 } 47075 notify RET kevent 0 47075 notify CALL fcntl(7,F_GETFL) 47075 notify RET fcntl 0 47075 notify CALL fcntl(7,F_SETFL,0x4) 47075 notify RET fcntl 0 47075 notify CALL getdents(7,0xc000084000,0x2000) 47075 notify RET getdents 96/0x60 47075 notify CALL getdents(7,0xc000084000,0x2000) 47075 notify RET getdents 0 47075 notify CALL lstat(0xc0000145f0,0xc00005ec38) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a" 47075 notify STRU struct stat { dev=1024, ino=1690233, mode=drwxr-xr-x , nlink=2, uid=1000<"syncthing">, gid=1000<"syncthing">, rdev=6745463, atime=1547586132<"Jan 15 21:02:12 2019">.581493896, mtime=1547586132<"Jan 15 21:02:12 2019">.581493896, ctime=1547586132<"Jan 15 21:02:12 2019">.581493896, size=512, blocks=4, blksize=16384, flags=0x0, gen=0x0 } 47075 notify RET lstat 0 47075 notify CALL close(7) 47075 notify RET close 0 47075 notify CALL open(0xc000014690,0x4) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a" 47075 notify RET open 7 47075 notify CALL kevent(3,0xc000065ad0,1,0,0,0) 47075 notify STRU struct kevent { ident=7, filter=EVFILT_VNODE, flags=0x21, fflags=0x23, data=0, udata=0x0 } 47075 notify RET kevent 0 47075 notify CALL kevent(3,0,0,0xc000065f40,1,0) 47075 notify RET __thrsleep 0 47075 notify CALL clock_gettime(CLOCK_MONOTONIC,0xc000043f00) 47075 notify STRU struct timespec { 290053.612086123 } 47075 notify RET clock_gettime 0 47075 notify CALL kevent(8,0,0,0xc000043710,64,0xc0000436f8) 47075 notify STRU struct timespec { 0 } 47075 notify RET kevent 0 47075 notify CALL nanosleep(0xc000043f00,0) 47075 notify STRU struct timespec { 0.000020000 } 47075 notify STRU struct kevent { ident=7, filter=EVFILT_VNODE, flags=0x21, fflags=0x12, data=0, udata=0x0 } 47075 notify RET kevent 1 47075 notify CALL stat(0xc0000146e0,0xc00005ecf8) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a" 47075 notify STRU struct stat { dev=1024, ino=1690233, mode=drwxr-xr-x , nlink=3, uid=1000<"syncthing">, gid=1000<"syncthing">, rdev=6745463, atime=1547586132<"Jan 15 21:02:12 2019">.581493896, mtime=1547586132<"Jan 15 21:02:12 2019">.581493896, ctime=1547586132<"Jan 15 21:02:12 2019">.581493896, size=512, blocks=4, blksize=16384, flags=0x0, gen=0x0 } 47075 notify RET stat 0 47075 notify CALL kevent(3,0xc000065e80,1,0,0,0) 47075 notify STRU struct kevent { ident=7, filter=EVFILT_VNODE, flags=0x21, fflags=0x23, data=0, udata=0x0 } 47075 notify RET kevent 0 47075 notify CALL open(0xc000014730,0x10000) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a" 47075 notify RET open 9 47075 notify CALL kevent(8,0xc000065a50,2,0,0,0) 47075 notify STRU struct kevent [2] { ident=9, filter=EVFILT_READ, flags=0x21, fflags=0<>, data=0, udata=0x24cf18ed0 } { ident=9, filter=EVFILT_WRITE, flags=0x21, fflags=0<>, data=0, udata=0x24cf18ed0 } 47075 notify RET kevent 0 47075 notify CALL fcntl(9,F_GETFL) 47075 notify RET fcntl 0 47075 notify CALL fcntl(9,F_SETFL,0x4) 47075 notify RET fcntl 0 47075 notify CALL getdents(9,0xc000086000,0x2000) 47075 notify RET getdents 96/0x60 47075 notify CALL getdents(9,0xc000086000,0x2000) 47075 notify RET getdents 0 47075 notify CALL lstat(0xc0000147d0,0xc00005edb8) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a/b" 47075 notify STRU struct stat { dev=1024, ino=1690238, mode=drwxr-xr-x , nlink=2, uid=1000<"syncthing">, gid=1000<"syncthing">, rdev=6745464, atime=1547586132<"Jan 15 21:02:12 2019">.581493896, mtime=1547586132<"Jan 15 21:02:12 2019">.581493896, ctime=1547586132<"Jan 15 21:02:12 2019">.581493896, size=512, blocks=4, blksize=16384, flags=0x0, gen=0x0 } 47075 notify RET lstat 0 47075 notify CALL close(9) 47075 notify RET close 0 47075 notify CALL open(0xc000014870,0x4) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a/b" 47075 notify RET open 9 47075 notify CALL kevent(3,0xc000065ad0,1,0,0,0) 47075 notify STRU struct kevent { ident=9, filter=EVFILT_VNODE, flags=0x21, fflags=0<>, data=0, udata=0x0 } 47075 notify RET kevent 0 47075 notify CALL kevent(3,0,0,0xc000065f40,1,0) 47075 notify RET nanosleep 0 47075 notify CALL clock_gettime(CLOCK_MONOTONIC,0xc000043f00) 47075 notify STRU struct timespec { 290053.628530812 } 47075 notify RET clock_gettime 0 47075 notify CALL kevent(8,0,0,0xc000043710,64,0xc0000436f8) 47075 notify STRU struct timespec { 0 } 47075 notify RET kevent 0 47075 notify CALL nanosleep(0xc000043f00,0) 47075 notify STRU struct timespec { 0.000020000 } 47075 notify RET nanosleep 0 47075 notify CALL clock_gettime(CLOCK_MONOTONIC,0xc000043f00) 47075 notify STRU struct timespec { 290053.648548756 } 47075 notify RET clock_gettime 0 47075 notify CALL kevent(8,0,0,0xc000043710,64,0xc0000436f8) 47075 notify STRU struct timespec { 0 } 47075 notify RET kevent 0 47075 notify CALL __thrwakeup(0xc0000346b8,1) 47075 notify RET __thrwakeup 0 47075 notify CALL nanosleep(0xc000043f00,0) 47075 notify STRU struct timespec { 0.000020000 } 47075 notify RET __thrsleep 0 47075 notify CALL stat(0xc0000148c0,0xc00005ee78) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a" 47075 notify STRU struct stat { dev=1024, ino=1690233, mode=drwxr-xr-x , nlink=3, uid=1000<"syncthing">, gid=1000<"syncthing">, rdev=6745463, atime=1547586132<"Jan 15 21:02:12 2019">.581493896, mtime=1547586132<"Jan 15 21:02:12 2019">.581493896, ctime=1547586132<"Jan 15 21:02:12 2019">.581493896, size=512, blocks=4, blksize=16384, flags=0x0, gen=0x0 } 47075 notify RET stat 0 47075 notify CALL kevent(3,0xc000066b80,1,0,0,0) 47075 notify STRU struct kevent { ident=7, filter=EVFILT_VNODE, flags=0x21, fflags=0x23, data=0, udata=0x0 } 47075 notify RET kevent 0 47075 notify CALL open(0xc000014910,0x10000) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a" 47075 notify RET open 10/0xa 47075 notify CALL kevent(8,0xc000066958,2,0,0,0) 47075 notify STRU struct kevent [2] { ident=10, filter=EVFILT_READ, flags=0x21, fflags=0<>, data=0, udata=0x24cf18ed0 } { ident=10, filter=EVFILT_WRITE, flags=0x21, fflags=0<>, data=0, udata=0x24cf18ed0 } 47075 notify RET kevent 0 47075 notify CALL fcntl(10,F_GETFL) 47075 notify RET fcntl 0 47075 notify CALL fcntl(10,F_SETFL,0x4) 47075 notify RET fcntl 0 47075 notify CALL getdents(10,0xc000088000,0x2000) 47075 notify RET getdents 96/0x60 47075 notify CALL getdents(10,0xc000088000,0x2000) 47075 notify RET getdents 0 47075 notify CALL lstat(0xc0000149b0,0xc00005ef38) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a/b" 47075 notify STRU struct stat { dev=1024, ino=1690238, mode=drwxr-xr-x , nlink=3, uid=1000<"syncthing">, gid=1000<"syncthing">, rdev=6745464, atime=1547586132<"Jan 15 21:02:12 2019">.581493896, mtime=1547586132<"Jan 15 21:02:12 2019">.621493979, ctime=1547586132<"Jan 15 21:02:12 2019">.621493979, size=512, blocks=4, blksize=16384, flags=0x0, gen=0x0 } 47075 notify RET lstat 0 47075 notify CALL close(10) 47075 notify RET close 0 47075 notify CALL kevent(3,0xc000066a60,1,0,0,0) 47075 notify STRU struct kevent { ident=9, filter=EVFILT_VNODE, flags=0x21, fflags=0x23, data=0, udata=0x0 } 47075 notify RET kevent 0 47075 notify CALL open(0xc000014a50,0x10000) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a" 47075 notify RET open 10/0xa 47075 notify CALL kevent(8,0xc000066aa0,2,0,0,0) 47075 notify STRU struct kevent [2] { ident=10, filter=EVFILT_READ, flags=0x21, fflags=0<>, data=0, udata=0x24cf18ed0 } { ident=10, filter=EVFILT_WRITE, flags=0x21, fflags=0<>, data=0, udata=0x24cf18ed0 } 47075 notify RET kevent 0 47075 notify CALL fcntl(10,F_GETFL) 47075 notify RET fcntl 0 47075 notify CALL fcntl(10,F_SETFL,0x4) 47075 notify RET fcntl 0 47075 notify CALL getdents(10,0xc00008a000,0x2000) 47075 notify RET getdents 96/0x60 47075 notify CALL getdents(10,0xc00008a000,0x2000) 47075 notify RET getdents 0 47075 notify CALL lstat(0xc000014af0,0xc00005eff8) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a/b" 47075 notify STRU struct stat { dev=1024, ino=1690238, mode=drwxr-xr-x , nlink=3, uid=1000<"syncthing">, gid=1000<"syncthing">, rdev=6745464, atime=1547586132<"Jan 15 21:02:12 2019">.581493896, mtime=1547586132<"Jan 15 21:02:12 2019">.621493979, ctime=1547586132<"Jan 15 21:02:12 2019">.621493979, size=512, blocks=4, blksize=16384, flags=0x0, gen=0x0 } 47075 notify RET lstat 0 47075 notify CALL close(10) 47075 notify RET close 0 47075 notify CALL stat(0xc000014b90,0xc00005f0b8) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a/b" 47075 notify STRU struct stat { dev=1024, ino=1690238, mode=drwxr-xr-x , nlink=3, uid=1000<"syncthing">, gid=1000<"syncthing">, rdev=6745464, atime=1547586132<"Jan 15 21:02:12 2019">.581493896, mtime=1547586132<"Jan 15 21:02:12 2019">.621493979, ctime=1547586132<"Jan 15 21:02:12 2019">.621493979, size=512, blocks=4, blksize=16384, flags=0x0, gen=0x0 } 47075 notify RET stat 0 47075 notify CALL kevent(3,0xc000066b80,1,0,0,0) 47075 notify STRU struct kevent { ident=9, filter=EVFILT_VNODE, flags=0x21, fflags=0x23, data=0, udata=0x0 } 47075 notify RET kevent 0 47075 notify CALL open(0xc000014be0,0x10000) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a/b" 47075 notify RET open 10/0xa 47075 notify CALL kevent(8,0xc000066958,2,0,0,0) 47075 notify STRU struct kevent [2] { ident=10, filter=EVFILT_READ, flags=0x21, fflags=0<>, data=0, udata=0x24cf18ed0 } { ident=10, filter=EVFILT_WRITE, flags=0x21, fflags=0<>, data=0, udata=0x24cf18ed0 } 47075 notify RET kevent 0 47075 notify CALL fcntl(10,F_GETFL) 47075 notify RET fcntl 0 47075 notify CALL fcntl(10,F_SETFL,0x4) 47075 notify RET fcntl 0 47075 notify CALL getdents(10,0xc00008c000,0x2000) 47075 notify RET getdents 96/0x60 47075 notify CALL getdents(10,0xc00008c000,0x2000) 47075 notify RET getdents 0 47075 notify CALL lstat(0xc000014c80,0xc00005f178) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a/b/c" 47075 notify STRU struct stat { dev=1024, ino=1690239, mode=drwxr-xr-x , nlink=2, uid=1000<"syncthing">, gid=1000<"syncthing">, rdev=6745465, atime=1547586132<"Jan 15 21:02:12 2019">.581493896, mtime=1547586132<"Jan 15 21:02:12 2019">.581493896, ctime=1547586132<"Jan 15 21:02:12 2019">.581493896, size=512, blocks=4, blksize=16384, flags=0x0, gen=0x0 } 47075 notify RET lstat 0 47075 notify CALL close(10) 47075 notify RET close 0 47075 notify CALL open(0xc000014d20,0x4) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a/b/c" 47075 notify RET open 10/0xa 47075 notify CALL kevent(3,0xc000066a60,1,0,0,0) 47075 notify STRU struct kevent { ident=10, filter=EVFILT_VNODE, flags=0x21, fflags=0x23, data=0, udata=0x0 } 47075 notify RET kevent 0 47075 notify CALL open(0xc000014d70,0x10000) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a/b" 47075 notify RET open 11/0xb 47075 notify CALL kevent(8,0xc000066aa0,2,0,0,0) 47075 notify STRU struct kevent [2] { ident=11, filter=EVFILT_READ, flags=0x21, fflags=0<>, data=0, udata=0x24cf18ed0 } { ident=11, filter=EVFILT_WRITE, flags=0x21, fflags=0<>, data=0, udata=0x24cf18ed0 } 47075 notify RET kevent 0 47075 notify CALL fcntl(11,F_GETFL) 47075 notify RET fcntl 0 47075 notify CALL fcntl(11,F_SETFL,0x4) 47075 notify RET fcntl 0 47075 notify CALL getdents(11,0xc00008e000,0x2000) 47075 notify RET getdents 96/0x60 47075 notify CALL getdents(11,0xc00008e000,0x2000) 47075 notify RET getdents 0 47075 notify CALL lstat(0xc000014e10,0xc00005f238) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a/b/c" 47075 notify STRU struct stat { dev=1024, ino=1690239, mode=drwxr-xr-x , nlink=2, uid=1000<"syncthing">, gid=1000<"syncthing">, rdev=6745465, atime=1547586132<"Jan 15 21:02:12 2019">.581493896, mtime=1547586132<"Jan 15 21:02:12 2019">.581493896, ctime=1547586132<"Jan 15 21:02:12 2019">.581493896, size=512, blocks=4, blksize=16384, flags=0x0, gen=0x0 } 47075 notify RET lstat 0 47075 notify CALL close(11) 47075 notify RET close 0 47075 notify CALL stat(0xc000014eb0,0xc00005f2f8) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a/b/c" 47075 notify STRU struct stat { dev=1024, ino=1690239, mode=drwxr-xr-x , nlink=2, uid=1000<"syncthing">, gid=1000<"syncthing">, rdev=6745465, atime=1547586132<"Jan 15 21:02:12 2019">.581493896, mtime=1547586132<"Jan 15 21:02:12 2019">.581493896, ctime=1547586132<"Jan 15 21:02:12 2019">.581493896, size=512, blocks=4, blksize=16384, flags=0x0, gen=0x0 } 47075 notify RET stat 0 47075 notify CALL kevent(3,0xc000066b80,1,0,0,0) 47075 notify STRU struct kevent { ident=10, filter=EVFILT_VNODE, flags=0x21, fflags=0x23, data=0, udata=0x0 } 47075 notify RET kevent 0 47075 notify CALL open(0xc000014f00,0x10000) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a/b/c" 47075 notify RET open 11/0xb 47075 notify CALL kevent(8,0xc000066958,2,0,0,0) 47075 notify STRU struct kevent [2] { ident=11, filter=EVFILT_READ, flags=0x21, fflags=0<>, data=0, udata=0x24cf18ed0 } { ident=11, filter=EVFILT_WRITE, flags=0x21, fflags=0<>, data=0, udata=0x24cf18ed0 } 47075 notify RET kevent 0 47075 notify CALL fcntl(11,F_GETFL) 47075 notify RET fcntl 0 47075 notify CALL fcntl(11,F_SETFL,0x4) 47075 notify RET fcntl 0 47075 notify CALL getdents(11,0xc000094000,0x2000) 47075 notify RET getdents 64/0x40 47075 notify CALL getdents(11,0xc000094000,0x2000) 47075 notify RET getdents 0 47075 notify CALL close(11) 47075 notify RET close 0 47075 notify CALL open(0xc000014f50,0x10000) 47075 notify NAMI "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a/b/c" 47075 notify RET open 11/0xb 47075 notify CALL kevent(8,0xc000066aa0,2,0,0,0) 47075 notify STRU struct kevent [2] { ident=11, filter=EVFILT_READ, flags=0x21, fflags=0<>, data=0, udata=0x24cf18ed0 } { ident=11, filter=EVFILT_WRITE, flags=0x21, fflags=0<>, data=0, udata=0x24cf18ed0 } 47075 notify RET kevent 0 47075 notify CALL fcntl(11,F_GETFL) 47075 notify RET fcntl 0 47075 notify CALL fcntl(11,F_SETFL,0x4) 47075 notify RET fcntl 0 47075 notify CALL getdents(11,0xc000096000,0x2000) 47075 notify RET getdents 64/0x40 47075 notify CALL getdents(11,0xc000096000,0x2000) 47075 notify RET getdents 0 47075 notify CALL close(11) 47075 notify RET close 0 47075 notify CALL clock_gettime(CLOCK_REALTIME,0xc000064cc8) 47075 notify STRU struct timespec { 1547586132<"Jan 15 21:02:12 2019">.622723274 } 47075 notify RET clock_gettime 0 47075 notify CALL clock_gettime(CLOCK_MONOTONIC,0xc000064cd0) 47075 notify STRU struct timespec { 290053.649756165 } 47075 notify RET clock_gettime 0 47075 notify CALL open(0xc000016130,0) 47075 notify NAMI "/etc//localtime" 47075 notify RET open 11/0xb 47075 notify CALL read(11,0xc00003e9a8,0x1000) 47075 notify GIO fd 11 read 3661 bytes "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\a\0\0\0\a\0\0\0\0\0\0\0\M-r\0\0\0\a\0\0\0\r\M^[&\M--\240\M^[\M-V\^E \M^\\M-O0\240\M^]\M-$\M-C\240\M^^\M^\\M^]\240\M^_\M^W\^Z\240\240\M^E\M-: \M-!v\M-|\240\M-"e\M^\ \M-#{\M-H\240\M-$N\M-8\240\M-%?\M-{ \M-&%` \M-''\M-F \M-(*, \M-(\M-k\M-x\240\M-*\0\M-S\ \240\M-*\M-U\^U \M-+\M-i\M-p \M-,\M-Gl \M--\M-I\M-R \M-.\M-'N \M-/\240y\240\M-0\M^G0 \M-1\M^R\M-P\240\M-2pL\240\M-3r\M-2\240\M-4P.\240\M-5IZ \M-60\^P\240\M-72v\240\M-8\^O\M-r\240\M-9\^RX\240\M-9\M-o\M-T\240\M-:\M-i\0 \M-;\M-X\M-q \M-<\M-[W \M-=\M-8\M-S \M->\M-1\M-~\240\M-?\M^X\M-5 \M-@\M^[\ \^[ \M-Ax\M^W \M-Bz\M-} \M-CXy \M-DQ\M-$\240\M-E8[ \M-F:\M-A \M-GX\M-V\240\M-G\M-Z \240\M-J\^V&\M^P\M-J\M^WY\M^P\M-K\M-Q\^^\M^P\M-Lw;\M^P\M-M\M-1\0\M^P\M-N`X\^P\M-O\M^P\M-b\M^P\M-Pn^\M^P\M-Qr\^V\^P\M-Q\M-{2\^P\M-Ri\M-~ \M-Sc)\240\M-TI\M-` \M-U\^^!\240\M-UB\M-}\M^P\M-U\M-_\M-`\^P\M-VN\ \M-, \M-V\M-~\^C\240\M-X.\M^N \M-X\M-y\M^U \M-Z\^Np \M-Z\M-k\M-l \M-[\M-e\^W\240\M-\\M-K\M-N \M-]\M-D\M-y\240\M-^\M-4\M-j\240\M-_\M-.\^V \M-`\M^T\M-L\240\M-arH\240\M-bkt \M-cR*\240\M-dT\M^P\240\M-e2\f\240\M-f=\M-- \M-g\^[) \M-h\^TT\240\M-h\M-{\v \M-i\M-}q \M-j\M-Z\M-m \M-k\M-]S \M-l\M-:\M-O \ \M-m\M-3\M-z\240\M-n\M^Z\M-1 \M-o\M^Ag\240\M-p\M^_} \M-qaI\240\M-r\^?_ \M-sJf \M-t_A \M-u!\r\240\M-v?# \M-w\0\M-o\240\M-x\^_\^E \M-x\M-`\M-Q\240\M-y\M-~\M-g \M-z\M-@\M-3\240\M-{\M-h\^C\240\M-|{\M-+\240\M-}\M-G\M-;p\^Cp\M-F \^D)X \^EP\M-( \^F : \a0\M^J \a\M-i\^\ \^Pl \M-H\M-~ \M-pN \v\M-2\^Z\240\f\M-P0 \r\M^Q\M-|\240\^N\M-0\^R \^Oq\M-^\240\^P\M^Y.\240\^QQ\M-@\240\^Ry\^P\240\^S1\M-"\240\^TX\M-r\240\^U#\M-k\M^P\^V8\M-F\M^P\^W\^C\M-M\M^P\^X\^X\M-(\M^P\^X\M-c\M-/\M^P\^Y\M-x\M^J\M^P\^Z\M-C\M^Q\M^P\^[\M-a\M-'\^P\^\\M-,\M-.\^P\^]\M-A\M^I\^P\^^\M^L\M^P\^P\^_\M-!k\^P lr\ \^P!\M^AM\^P"LT\^P#a/\^P$,6\^P%JK\M^P&\f\^X\^P'*-\M^P'\M-u4\M^P) \^O\M^P)\M-U\^V\M^P*\M-i\M-q\M^P+\M-4\M-x\M^P,\M-I\M-S\M^P-\M^T\M-Z\M^P.\M-)\M-5\M^P/t\M-<\M^P0\M^I\M^W\M^P0\M-g$\0001]\M-Y\^P2r\M-4\^P3=\M-;\^P4R\M^V\^P5\^]\M^]\^P62x\^P6\M-}\^?\^P8\^[\M^T\M^P8\M-]a\^P9\M-{v\M^P:\M-=C\^P;\M-[X\M^P<\M-&_\M^P=\M-;:\M^P>\M^FA\M^P?\M^[\^\\M^P@f#\M^PA\M^D9\^PBF\ \^E\M^PCd\^[\^PD%\M-g\M^PEC\M-}\^PF\^E\M-I\M^PG#\M-_\^PG\M-n\M-f\^PI\^C\M-A\^PI\M-N\M-H\^PJ\M-c\M-#\^PK\M-.\M-*\^PL\M-L\M-?\M^PM\M^N\M^L\^PN\M-,\M-!\M^POnn\^PP\M^L\M^C\M^PQW\M^J\M^PRle\M^PS7l\M^PTLG\M^PU\^WN\M^PV,)\M^PV\M-w0\M^PX\^UF\^PX\M-W\^R\M^PY\M-u(\^PZ\M-6\M-t\M^P[\M-U \^P\\\240\^Q\^P]\M-4\M-l\^P^\^?\M-s\^P_\M^T\M-N\^P`_\M-U\^Pa}\M-j\M^Pb?\M-7\^Pc]\M-L\M^Pd\^_\M^Y\^Pe=\M-.\M^Pf\b\M-5\M^Pg\^]\M^P\M^Pg\M-h\M^W\M^Ph\M-}r\M^Pi\M-Hy\M^Pj\M-]T\M^Pk\M-([\M^Pl\M-Fq\^Pm\M^H=\M^Pn\M-&S\^Poh\^_\M^Pp\M^F5\^PqQ<\^Prf\^W\^Ps1\^^\^PtE\M-y\^Pu\^Q\0\^Pv/\^U\M^Pv\M-p\M-b\^P\ x\^N\M-w\M^Px\M-P\M-D\^Py\M-n\M-Y\M^Pz\M-0\M-&\^P{\M-N\M-;\M^P|\M^Y\M-B\M^P}\M-.\M^]\M^P~y\M-$\M^P\^?\M^N\^?\M^P\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^B\0\^B\0\^B\0\^B\0\^B\0\^A\0\^A\0\^B\0\^A\0\^A\0\^A\0\^A\ \0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^C\^E\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^F\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\ \^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\^D\^E\0\0\^N\^P\^A\0\0\0\0\0\0\^D\0\0\^\ \^A\b\0\0\^N\^P\0\0\0\0\^N\^P\^A\0\0\0\0\0\0\^D\0\0\0\0\0\^DBST\ \0GMT\0BDST\0\^A\^A\^A\0\^A\^A\0\0\0\0\0\^A\^A\0TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\b\0\0\0\b\0\0\0\0\0\0\0\M-s\0\0\0\b\0\0\0\^Q\M^?\M^?\M^?\M^?\^Z] \M-K\M^?\M^?\M^?\M^?\M^[&\M--\240\M^?\M^?\M^?\M^?\M^[\M-V\^E \M^?\M^?\M^?\M^?\M^\\M-O0\240\M^?\M^?\M^?\M^?\M^]\M-$\M-C\240\M^?\M^?\ \M^?\M^?\M^^\M^\\M^]\240\M^?\M^?\M^?\M^?\M^_\M^W\^Z\240\M^?\M^?\M^?\M^?\240\M^E\M-: \M^?\M^?\M^?\M^?\M-!v\M-|\240\M^?\M^?\M^?\M^?\M-"e\M^\ \M^?\M^?\M^?\M^?\M-#{\M-H\240\M^?\M^?\M^?\M^?\M-$N\M-8\240\M^?\M^?\M^?\M^?\M-%?\M-{ \M^?\M^?\M^?\M^?\M-&%` \M^?\M^?\M^?\M^?\M-''\M-F \M^?\M^?\M^?\M^?\M-(\ *, \M^?\M^?\M^?\M^?\M-(\M-k\M-x\240\M^?\M^?\M^?\M^?\M-*\0\M-S\240\M^?\M^?\M^?\M^?\M-*\M-U\^U \M^?\M^?\M^?\M^?\M-+\M-i\M-p \M^?\M^?\M^?\M^?\M-,\M-Gl \M^?\M^?\M^?\M^?\M--\M-I\M-R \M^?\M^?\M^?\M^?\M-.\M-'N \M^?\M^?\M^?\M^?\M-/\240y\240\M^?\M^?\M^?\M^?\M-0\M^G0 \M^?\M^?\M^?\M^?\M-1\M^R\M-P\240\ \M^?\M^?\M^?\M^?\M-2pL\240\M^?\M^?\M^?\M^?\M-3r\M-2\240\M^?\M^?\M^?\M^?\M-4P.\240\M^?\M^?\M^?\M^?\M-5IZ \M^?\M^?\M^?\M^?\M-60\^P\240\M^?\M^?\M^?\M^?\M-72v\240\M^?\M^?\M^?\M^?\M-8\^O\M-r\240\M^?\M^?\M^?\M^?\M-9\^RX\240\M^?\M^?\M^?\M^?\M-9\M-o\M-T\240\M^?\M^?\M^?\M^?\M-:\M-i\0 \M^?\M^?\M^?\M^?\ \M-;\M-X\M-q \M^?\M^?\M^?\M^?\M-<\M-[W \M^?\M^?\M^?\M^?\M-=\M-8\M-S \M^?\M^?\M^?\M^?\M->\M-1\M-~\240\M^?\M^?\M^?\M^?\M-?\M^X\M-5 \M^?\M^?\M^?\M^?\M-@\M^[\^[ \M^?\M^?\M^?\M^?\M-Ax\M^W \M^?\M^?\M^?\M^?\M-Bz\M-} \M^?\M^?\M^?\M^?\M-CXy \M^?\M^?\M^?\M^?\M-DQ\M-$\240\M^?\M^?\M^?\M^?\M-E8[ \M^?\M^?\ \M^?\M^?\M-F:\M-A \M^?\M^?\M^?\M^?\M-GX\M-V\240\M^?\M^?\M^?\M^?\M-G\M-Z \240\M^?\M^?\M^?\M^?\M-J\^V&\M^P\M^?\M^?\M^?\M^?\M-J\M^WY\M^P\M^?\M^?\M^?\M^?\M-K\M-Q\^^\M^P\M^?\M^?\M^?\M^?\M-Lw;\M^P\M^?\M^?\M^?\M^?\M-M\M-1\0\M^P\M^?\M^?\M^?\M^?\M-N`X\^P\M^?\M^?\M^?\M^?\M-O\M^P\M-b\M^P\M^?\M^?\M^?\ \M^?\M-Pn^\M^P\M^?\M^?\M^?\M^?\M-Qr\^V\^P\M^?\M^?\M^?\M^?\M-Q\M-{2\^P\M^?\M^?\M^?\M^?\M-Ri\M-~ \M^?\M^?\M^?\M^?\M-Sc)\240\M^?\M^?\M^?\M^?\M-TI\M-` \M^?\M^?\M^?\M^?\M-U\^^!\240\M^?\M^?\M^?\M^?\M-UB\M-}\M^P\M^?\M^?\M^?\M^?\M-U\M-_\M-`\^P\M^?\M^?\M^?\M^?\M-VN\M-, \M^?\M^?\M^?\M^?\M-V\M-~\^C\240\ \M^?\M^?\M^?\M^?\M-X.\M^N \M^?\M^?\M^?\M^?\M-X\M-y\M^U \M^?\M^?\M^?\M^?\M-Z\^Np \M^?\M^?\M^?\M^?\M-Z\M-k\M-l \M^?\M^?\M^?\M^?\M-[\M-e\^W\240\M^?\M^?\M^?\M^?\M-\\M-K\M-N \M^?\M^?\M^?\M^?\M-]\M-D\M-y\240\M^?\M^?\M^?\M^?\M-^\M-4\M-j\240\M^?\M^?\M^?\M^?\M-_\M-.\^V \M^?\M^?\M^?\M^?\M-`\M^T\M-L\ \240\M^?\M^?\M^?\M^?\M-arH\240\M^?\M^?\M^?\M^?\M-bkt \M^?\M^?\M^?\M^?\M-cR*\240\M^?\M^?\M^?\M^?\M-dT\M^P\240\M^?\M^?\M^?\M^?\M-e2\f\240\M^?\M^?\M^?\M^?\M-f=\M-- \M^?\M^?\M^?\M^?\M-g\^[) \M^?\M^?\M^?\M^?\M-h\^TT\240\M^?\M^?\M^?\M^?\M-h\M-{\v \M^?\M^?\M^?\M^?\M-i\M-}q \M^?\M^?\M^?\M^?\M-j\M-Z\ \M-m \M^?\M^?\M^?\M^?\M-k\M-]S \M^?\M^?\M^?\M^?\M-l\M-:\M-O \M^?\M^?\M^?\M^?\M-m\M-3\M-z\240\M^?\M^?\M^?\M^?\M-n\M^Z\M-1 \M^?\M^?\M^?\M^?\M-o\M^Ag\240\M^?\M^?\M^?\M^?\M-p\M^_} \M^?\M^?\M^?\M^?\M-qaI\240\M^?\M^?\M^?\M^?\M-r\^?_ \M^?\M^?\M^?\M^?\M-sJf \M^?\M^?\M^?\M^?\M-t_A \M^?\M^?\M^?\M^?\ \M-u!\r\240\M^?\M^?\M^?\M^?\M-v?# \M^?\M^?\M^?\M^?\M-w\0\M-o\240\M^?\M^?\M^?\M^?\M-x\^_\^E \M^?\M^?\M^?\M^?\M-x\M-`\M-Q\240\M^?\M^?\M^?\M^?\M-y\M-~\M-g \M^?\M^?\M^?\M^?\M-z\M-@\M-3\240\M^?\M^?\M^?\M^?\M-{\M-h\^C\240\M^?\M^?\M^?\M^?\M-|{\M-+\240\M^?\M^?\M^?\M^?\M-}\M-G\M-;p\0\0\0\0\^Cp\M-F \0\ \0\0\0\^D)X \0\0\0\0\^EP\M-( \0\0\0\0\^F : \0\0\0\0\a0\M^J \0\0\0\0\a\M-i\^\ \0\0\0\0 \^Pl \0\0\0\0 \M-H\M-~ \0\0\0\0 \M-pN \0\0\0\0\v\M-2\^Z\240\0\0\0\0\f\M-P0 \0\0\0\0\r\M^Q\M-|\240\0\0\0\0\^N\M-0\^R \0\0\0\0\^Oq\M-^\240\0\0\0\0\^P\M^Y.\240\0\0\0\0\^QQ\M-@\240\0\0\0\0\^Ry\^P\240\0\0\0\0\^S1\M-"\240\0\0\0\0\^TX\M-r\240\0\0\0\0\^U#\M-k\M^P\0\0\0\0\^V8\M-F\M^P\0\0\0\0\^W\^C\M-M\M^P\0\0\0\0\^X\^X\M-(\M^P\0\0\ \0\0\^X\M-c\M-/\M^P\0\0\0\0\^Y\M-x\M^J\M^P\0\0\0\0\^Z\M-C\M^Q\M^P\0\0\0\0\^[\M-a\M-'\^P\0\0\0\0\^\\M-,\M-.\^P\0\0\0\0\^]\M-A\M^I\^P\0\0\0\0\^^\M^L\M^P\^P\0\0\0\0\^_\M-!k\^P\0\0\0\0 lr\^P\0\0\0\0!\M^AM\^P\0\0\0\0"LT\^P\0\0\0\0#a/\^P\0\0\0\0$,6\^P\0\0\0\0%JK\M^P\0\0\0\0&\f\^X\^P\0\0\0\0'*-\M^P\ \0\0\0\0'\M-u4\M^P\0\0\0\0) \^O\M^P\0\0\0\0)\M-U\^V\M^P\0\0\0\0*\M-i\M-q\M^P\0\0\0\0+\M-4\M-x\M^P\0\0\0\0,\M-I\M-S\M^P\0\0\0\0-\M^T\M-Z\M^P\0\0\0\0.\M-)\M-5\M^P\0\0\0\0/t\M-<\M^P\0\0\0\0000\M^I\M^W\M^P\0\0\0\0000\M-g$\0\0\0\0\0001]\M-Y\^P\0\0\0\0002r\M-4\^P\0\0\0\0003=\M-;\^P\0\0\0\0004R\M^V\^P\0\0\0\0005\^]\M^]\^P\0\0\ \0\00062x\^P\0\0\0\0006\M-}\^?\^P\0\0\0\08\^[\M^T\M^P\0\0\0\08\M-]a\^P\0\0\0\09\M-{v\M^P\0\0\0\0:\M-=C\^P\0\0\0\0;\M-[X\M^P\0\0\0\0<\M-&_\M^P\0\0\0\0=\M-;:\M^P\0\0\0\0>\M^FA\M^P\0\0\0\0?\M^[\^\\M^P\0\0\0\0@f#\M^P\0\0\0\0A\M^D9\^P\0\0\0\0BF\^E\M^P\0\0\0\0Cd\^[\^P\0\0\0\0D%\M-g\M^P\0\0\0\0EC\ \M-}\^P\0\0\0\0F\^E\M-I\M^P\0\0\0\0G#\M-_\^P\0\0\0\0G\M-n\M-f\^P\0\0\0\0I\^C\M-A\^P\0\0\0\0I\M-N\M-H\^P\0\0\0\0J\M-c\M-#\^P\0\0\0\0K\M-.\M-*\^P\0\0\0\0L\M-L\M-?\M^P\0\0\0\0M\M^N\M^L\^P\0\0\0\0N\M-,\M-!\M^P\0\0\0\0Onn\^P\0\0\0\0P\M^L\M^C\M^P\0\0\0\0QW\M^J\M^P\0\0\0\0Rle\M^P\0\0\0\0S7l\M^P\0\0\ \0\0TLG\M^P\0\0\0\0U\^WN\M^P\0\0\0\0V,)\M^P\0\0\0\0V\M-w0\M^P\0\0\0\0X\^UF\^P\0\0\0\0X\M-W\^R\M^P\0\0\0\0Y\M-u(\^P\0\0\0\0Z\M-6\M-t\M^P\0\0\0\0[\M-U \^P\0\0\0\0\\\240\^Q\^P\0\0\0\0]\M-4\M-l\^P\0\0\0\0^\^?\M-s\^P\0\0\0\0_\M^T\M-N\^P\0\0\0\0`_\M-U\^P\0\0\0\0a}\M-j\M^P\0\0\0\0b?\M-7\^P\0\0\0\0c]\M-L\M^P\0\0\0\0d\^_\M^Y\^P\0\0\0\0e=\M-.\M^P\0\0\0\0f\b\M-5\M^P\0\0\0\0g\^]\M^P\M^P\0\0\0\0g\M-h\M^W\M^P\0\0\0\0h\M-}r\M^P\0\0\0\0i\M-Hy\M^P\0\0\0\ \0j\M-]T\M^P\0\0\0\0k\M-([\M^P\0\0\0\0l\M-Fq\^P\0\0\0\0m\M^H=\M^P\0\0\0\0n\M-&S\^P\0\0\0\0oh\^_\M^P\0\0\0\0p\M^F5\^P\0\0\0\0qQ<\^P\0\0\0\0rf\^W\^P\0\0\0\0s1\^^\^P\0\0\0\0tE\M-y\^P\0\0\0\0u\^Q\0\^P\0\0\0\0v/\^U\M^P\0\0\0\0v\M-p\M-b\^P\0\0\0\0x\^N\M-w\M^P\0\0\0\0x\M-P\M-D\^P\0\0\0\0y\M-n\M-Y\ \M^P\0\0\0\0z\M-0\M-&\^P\0\0\0\0{\M-N\M-;\M^P\0\0\0\0|\M^Y\M-B\M^P\0\0\0\0}\M-.\M^]\M^P\0\0\0\0~y\M-$\M^P\0\0\0\0\^?\M^N\^?\M^P\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^C\^A\^C\^A\^C\ \^A\^C\^A\^C\^A\^B\^A\^B\^A\^C\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^D\^F\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\ \^E\^F\^E\^F\^E\^F\a\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\^E\^F\M^?\M^?\M^?\M-5\0\0\ \0\0\^N\^P\^A\^D\0\0\0\0\0\b\0\0\^\ \^A\f\0\0\^N\^P\0\^D\0\0\^N\^P\^A\^D\0\0\0\0\0\b\0\0\0\0\0\bLMT\0BST\0GMT\0BDST\0\0\^A\^A\^A\0\^A\^A\0\0\0\0\0\0\^A\^A\0 GMT0BST,M3.5.0/1,M10.5.0 " 47075 notify RET read 3661/0xe4d 47075 notify CALL read(11,0xc00003e9a8,0x1000) 47075 notify RET read 0 47075 notify CALL close(11) 47075 notify RET close 0 47075 notify CALL clock_gettime(CLOCK_REALTIME,0xc00003f8a8) 47075 notify STRU struct timespec { 1547586132<"Jan 15 21:02:12 2019">.622968280 } 47075 notify RET clock_gettime 0 47075 notify CALL clock_gettime(CLOCK_MONOTONIC,0xc00003f8b0) 47075 notify STRU struct timespec { 290053.650003429 } 47075 notify RET clock_gettime 0 47075 notify CALL write(2,0xc00009c000,0x72) 47075 notify GIO fd 2 wrote 114 bytes "2019/01/15 21:02:12 received notify.Create: "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a" " 47075 notify RET write 114/0x72 47075 notify CALL __thrsleep(0xc0000346b8,CLOCK_MONOTONIC,0,0,0xc0000346b8) 47075 notify RET nanosleep 0 47075 notify CALL clock_gettime(CLOCK_MONOTONIC,0xc000043e98) 47075 notify STRU struct timespec { 290053.668584397 } 47075 notify RET clock_gettime 0 47075 notify CALL clock_gettime(CLOCK_MONOTONIC,0xc000043e28) 47075 notify STRU struct timespec { 290053.668592708 } 47075 notify RET clock_gettime 0 47075 notify CALL __thrsleep(0xc000034338,CLOCK_MONOTONIC,0xc000043e80,0,0xc000034338) 47075 notify STRU struct timespec { 290113.668592708 } 47075 notify PSIG SIGTERM caught handler=0x455c30 mask=0<> 47075 notify RET __thrsleep -1 errno 88 Operation canceled 47075 notify CALL sigprocmask(SIG_UNBLOCK,0x4000) 47075 notify RET sigprocmask ~0x10100 47075 notify CALL getthrid() 47075 notify RET getthrid 246140/0x3c17c 47075 notify CALL thrkill(246140,SIGTERM,0) 47075 notify PSIG SIGTERM caught handler=0x455c30 mask=~0x14100 47075 notify RET thrkill 0 47075 notify CALL sigaction(SIGTERM,0xc000051528,0) 47075 notify STRU struct sigaction { handler=SIG_DFL, mask=~0<>, flags=0x43 } 47075 notify RET sigaction 0 47075 notify CALL sigprocmask(SIG_UNBLOCK,0x4000) 47075 notify RET sigprocmask ~0x10100 47075 notify CALL getthrid() 47075 notify RET getthrid 246140/0x3c17c 47075 notify CALL thrkill(246140,SIGTERM,0) 47075 notify PSIG SIGTERM SIG_DFL ```

OpenBSD 6.4

AudriusButkevicius commented 5 years ago

Actually, recursive watches do work, but it seems it takes some time for the "recursiveness" part to kick in?

syncthing$ mkdir -p a/b/c
syncthing$ /home/syncthing/go/bin/notify &
[1] 45674
syncthing$
syncthing$
syncthing$ mkdir -p a/b/c/d/e/f
2019/01/15 21:22:41 received notify.Create: "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a/b/c/d"
syncthing$ mkdir -p a/b/c/d/e/x
2019/01/15 21:22:45 received notify.Create: "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a/b/c/d/e/x"
syncthing$ mkdir -p a/b/c/d/e/f/a/b/c/d
2019/01/15 21:22:52 received notify.Create: "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a/b/c/d/e/f/a"
syncthing$ mkdir -p a/b/c/d/e/f/a/b/c/d/e/f/b
2019/01/15 21:22:56 received notify.Create: "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a/b/c/d/e/f/a/b/c/d/e"
syncthing$ 
AudriusButkevicius commented 5 years ago
syncthing$ mkdir a/b/x; mkdir a/b/x/x; mkdir a/b/x/x/x
2019/01/15 21:26:07 received notify.Create: "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a/b/x"

syncthing$ mkdir a/b/y; sleep 1; mkdir a/b/y/y; sleep 1; mkdir a/b/y/y/y
2019/01/15 21:26:26 received notify.Create: "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a/b/y"
2019/01/15 21:26:27 received notify.Create: "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a/b/y/y"
2019/01/15 21:26:28 received notify.Create: "/home/syncthing/go/src/github.com/syncthing/syncthing/lib/fs/test/a/b/y/y/y"
rjeczalik commented 5 years ago

@AudriusButkevicius Thanks for the detailed report! I think this happens because notify sets a watcher after it receives a create event, and only then it starts to listen for create events in that directory. Because b, d, c is created just after a, the events may arrive before the watcher is set and thus we miss them. Afaik there's no way to fix the race, other than doing rescans.

Is this a case, @pblaszczyk?

AudriusButkevicius commented 5 years ago

Random theory.

Event delivery from the kernel blocks the kernel from delivering further events.

That is, the thread that receives the event from the kernel should register a watch for subfolder upon receiving the event and before returning (control to the kernel).

Is subfolder registration happening in a separate go routine outside of the kqueue loop which would support the theroy?

rjeczalik commented 5 years ago

@AudriusButkevicius Everything happens async, outside kqueue loop with https://github.com/rjeczalik/notify/blob/master/watcher_kqueue.go#L133. At least I'm not aware of anything blocking as you described.

AudriusButkevicius commented 5 years ago

Yeah after having read the kqueue manual, it seems impossible to subscribe recursively, however, I think the following might be a sensible approach? If I am watching directory X, and subdirectory Y gets created, I should setup a watch for Y, walk Y and dispatch a created event for everything inside Y (potentially deduplicating as events from kqueue arrive later (or let it have duplicates, who cares))

rjeczalik commented 5 years ago

@AudriusButkevicius This would be viable solution, we already maintain an in-memory tree of watches (directories), so maybe it would be even possible to not send duplicates.