* Refactor.
* Refactor.

It was bad code because it could discard a request that happened after current
request expired:
1. SleeperNotifier sleeps on condition variable.
2. A new request comes in, @request is assigned. Condition variable is signaled,
   SleeperNotifier wakes up.
3. SleeperNotifier had enough time to complete the request it was working on, so
   it assigns @request = nil.

Thus, the latest request would be lost. It only works because only nearer in
time requests are ever sent to SleeperNotifier before onExpire is called. Those
can be safely discarded if one of the previous requests expires because it would
cover all of them.

ledestin/frugal_timeout