/*
* call-seq:
* lock.obtain(timeout = 1) -> bool
*
* Obtain a lock. Returns true if lock was successfully obtained. Make sure
* the lock is released using Lock#release. Otherwise you'll be left with a
* stale lock file.
*
* The timeout defaults to 1 second and 5 attempts are made to obtain the
* lock. If you're doing large batch updates on the index with multiple
* processes you may need to increase the lock timeout but 1 second will be
* substantial in most cases.
*
* timeout:: seconds to wait to obtain lock before timing out and returning
* false
* return:: true if lock was successfully obtained. Raises a
* Lock::LockError otherwise.
*/
static VALUE
frt_lock_obtain(int argc, VALUE *argv, VALUE self)
{
VALUE rtimeout;
int timeout = 1;
Lock *lock;
GET_LOCK(lock, self);
if (rb_scan_args(argc, argv, "01", &rtimeout) > 0) {
timeout = FIX2INT(rtimeout);
}
/* TODO: use the lock timeout */
if (!lock->obtain(lock)) {
rb_raise(cLockError, "could not obtain lock: #%s", lock->name);
}
return Qtrue;
}