Hi,
as some people already mentioned, we have a pretty ugly macro, snd_assert(). Actually, this macro is sometimes useful, but the implementation including the code flow in arguments is really bad.
I tried to kill this, either the following way:
- replace snd_assert(cond, flow...); with if (snd_BUG_ON(!cond)) flow...;
- use WARN_ON() if the check is needed essentially regardless of CONFIG_SND_DBEBUG value
- remove snd_assert() for obviously unneeded code-paths
The new snd_BUG_ON() macro takes the condition, and works like WARN_ON() if CONFIG_SND_DEBUG=y: prints the warning with stack trace, and returns the evaluated value. When CONFIG_SND_DEBUG=n, the macro returns always zero, so that the compiler will optimize out the unreached flows.
Since snd_BUG_ON() takes the condition of a bug, it's a negative condition against snd_assert(). It follows BUG_ON() and WARN_ON(), and easier to understand, IMO.
The patches are found on topic/remove-assert branch of my git tree:
git://git.kernel.org/pub/scm/linux/kernel/tiwai/sound-2.6.git
For gitweb, http://git.kernel.org/?p=linux/kernel/git/tiwai/sound-2.6.git;a=shortlog;h=t...
I haven't merged this topic yet. If you have a big objection or a better implementation idea, please let me know.
Takashi