lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <alpine.LFD.1.10.0809260752350.3265@nehalem.linux-foundation.org>
Date:	Fri, 26 Sep 2008 08:01:12 -0700 (PDT)
From:	Linus Torvalds <torvalds@...ux-foundation.org>
To:	Anirban Sinha <kernel@...rban.org>
cc:	linux-kernel@...r.kernel.org, mingo@...e.hu,
	Oleg Nesterov <oleg@...sign.ru>
Subject: Re: [PATCH]: add a new wait_event_interruptible_timeout_modify
 helper



On Thu, 25 Sep 2008, Anirban Sinha wrote:
> +
> +/**
> + * wait_event_interruptible_timeout_modify - sleep until a condition gets true or a timeout elapses.
> + * @wq: the waitqueue to wait on
> + * @condition: a C expression for the event to wait for
> + * @timeout: timeout, in jiffies
> + *
> + * The process is put to sleep (TASK_INTERRUPTIBLE) until the
> + * @condition evaluates to true or a signal is received.
> + * The @condition is checked each time the waitqueue @wq is woken up.
> + *
> + * wake_up() has to be called after changing any variable that could
> + * change the result of the wait condition.
> + *
> + * The function returns 0 if the @timeout elapsed, -ERESTARTSYS if it
> + * was interrupted by a signal, and the remaining jiffies otherwise
> + * if the condition evaluated to true before the timeout elapsed.
> + * It also modifies the @timeout value so that if the sleep is interrupted
> + * by a signal, the caller can call this helper again with the updated
> + * timeout.

Grr.

I'd _much_ rather just have a

	wait_event_interruptible_until(wr, condition, abs_timeout)

where the timeout is just given as an end value, and the user can just 
pre-calculate it once and the return code handling is simpler (either 
"success" or "EINTR").

Giving an absolute value also means that there is no rounding creep or 
anything like that in a loop, which otherwise happens very easily (even 
if we wouldn't normally really care).

And quite frankly, people can do that themselves even without a helper 
function, with simply

	unsigned long end = jiffies + timeout;
	...

	rc = wait_event_interruptible_timeout(wq, event, end - jiffies);
	if (rc < 0)
		goto out;

and now you always know the end-point, and 'end - jiffies' is always the 
remaining timeout.

		Linus
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ