Change assert condition in error message handler

Activating assert() in the default error message handler isn't always
good for producitve systems.  Make this optional and enable only when
a special configure option is given (i.e. for explicit debugging).
This commit is contained in:
Takashi Iwai 2007-10-24 12:53:08 +02:00
parent d6093c58f3
commit 631f7cde82
3 changed files with 23 additions and 3 deletions

7
NOTES
View File

@ -27,12 +27,15 @@ LIBASOUND_DEBUG is set (to a non-empty value).
When LIBASOUND_DEBUG=1 is set, the errors in hw_params configuration
will be dumped to stderr. Note that this will show even the non-fatal
errors of plug layer (trial-and-error of parameters).
When LIBASOUND_DEBUG=2 is set, the default error message handler calls
assert() to catch with a debugger, in addition to parameter debugging.
This feature is disabled when --with-debug=no is passed to configure,
i.e. no strict checking is done in alsa-lib.
In addition, when --enable-debug-assert configure option is given and
when LIBASOUND_DEBUG_ASSERT=1 is set, the default error message
handler can call assert() to catch with a debugger. This feature was
formerly activated via LIBASOUND_DEBUG=2.
Blocking Open Mode
==================

View File

@ -169,6 +169,20 @@ else
AC_MSG_RESULT(no)
fi
if test "$debug" = "yes"; then
AC_MSG_CHECKING(for debug assert)
AC_ARG_ENABLE(debug-assert,
AS_HELP_STRING([--enable-debug],
[enable assert call at the default error message handler]),
debug_assert="$enableval", debug_assert="no")
if test "$debug_assert" = "yes"; then
AC_MSG_RESULT(yes)
AC_DEFINE(ALSA_DEBUG_ASSERT,,[Enable assert at error message handler])
else
AC_MSG_RESULT(no)
fi
fi
dnl Temporary directory
AC_MSG_CHECKING(for tmpdir)
AC_ARG_WITH(tmpdir,

View File

@ -135,8 +135,11 @@ static void snd_err_msg_default(const char *file, int line, const char *function
fprintf(stderr, ": %s", snd_strerror(err));
putc('\n', stderr);
va_end(arg);
if (! strcmp(verbose, "assert") || atoi(verbose) > 1)
#ifdef ALSA_DEBUG_ASSERT
verbose = getenv("LIBASOUND_DEBUG_ASSERT");
if (verbose && *verbose)
assert(0);
#endif
}
/**