- sig1 = signal(SIGHUP, SIG_IGN);
- sig2 = signal(SIGINT, SIG_IGN);
- for (n = 0; link(sync_file, sync_lock) < 0 && n < 30; n++)
- sleep(2);
+ sighup = signal(SIGHUP, SIG_IGN);
+ sigint = signal(SIGINT, SIG_IGN);
+ for (n = TIMEOUT; --n >= 0;) {
+#ifdef LOCK_EX
+ if (flock(fileno(sync_fp), LOCK_EX|LOCK_NB) >= 0)
+ break;
+ if (errno != EWOULDBLOCK)
+ return -1;
+#else
+ if (link(sync_file, sync_lock) >= 0)
+ break;
+ if (errno != EEXIST)
+ return -1;
+#endif
+ sleep(1);
+ }
+ if (n <= 0)
+ return -1;