Fixed race between lock lease extend and lock lease expiry.

isn't this yet another race-condition? what if at the time you are calling scheduler.schedule() the lock has already expired? you will schedule a new forced unlock -> a lock owned by a possibly different thread might be accidentally unlocked.