RE: confusing code....whats the point of this construct ?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



-----Original Message-----
From: kernelnewbies-bounces@xxxxxxxxxxxxxxxxx [mailto:kernelnewbies-bounces@xxxxxxxxxxxxxxxxx] On Behalf Of Valdis.Kletnieks@xxxxxx
Sent: Wednesday, March 11, 2015 10:00 AM
To: Nicholas Mc Guire
Cc: Bj??rn Mork; kernelnewbies@xxxxxxxxxxxxxxxxx
Subject: Re: confusing code....whats the point of this construct ?

On Wed, 11 Mar 2015 17:46:56 +0100, Nicholas Mc Guire said:

> ret = ({ long __ret = (5*250);
>         do { _cond_resched(); } while (0);
>  	if (!({
> 		bool __cond = (({

>Gaak.
>
>         ret = wait_event_timeout(mgr->tx_waitq,
>                                  check_txmsg_state(mgr, txmsg),
>                                  (4 * HZ));

>-EGADS - use of macro as a function violates the Principle of Least Surprise....
>
>I have to wonder how many other places we've got bugs waiting to happen because of this....

I don't understand the problem here. The caller passes in a condition to be evaluated in a loop. Many times that condition is quite simple (e.g. a counter being non-zero). If it was a function the caller would have to pass in a pointer to a function that does the evaluation, as in:

int bar;

int foo(void)
{
	return bar;
}

...

	wait_event_interruptible(..., foo, ...);

Instead of the much simpler:

	wait_event_interruptible(..., bar, ...);

That latter seems easier to understand and require fewer instructions to be generated since there is no function call overhead.

Jeff Haran


_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies




[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux