rwlock(9) and mutex(9) definitions

Gleb Smirnoff <[email protected]>
Newsgroups gmane.os.freebsd.architechture
Message-ID <[email protected]>
  Hi,

[To: list constructed with help of git blame]

despite manual pages describe locking functions as voids in
reality some of them (not all) are preprocessor defines wrapped
in "do {} while (0)".

Such wraps don't really behave as a true void. For example you
can not tail call them:

void
smartass_lock(lock, clue)
{
	if (clue)
		return (rw_rlock(lock));
	else
		return (rw_wlock(lock));
}

This will fail on rw_wlock, but not on rw_rlock. However, if you
have WITNESS it will compile correctly :)

So, we need either make these function "static inline void" in
mtx.h and rwlock.h, or wrap them in __extension__ ({ }). Btw, the
latter is already done for mtx_trylock_spin() by kib in 90b581f2cc327.
Of course for try-lock functions inability of tail call is a bigger
issue then for voids. However, voids should be fixed as well, I believe.

Your call? "static inline" or "__extension__ ({ })"?

-- 
Gleb Smirnoff
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.