On RHEL AS4, 'man -s 3 malloc' states:
Recent versions of Linux libc (later than 5.4.23) and GNU libc (2.x) include a malloc implementation which is tunable via environment variables. When MALLOC_CHECK_ is set, a special (less efficient) implementation is used which is designed to be tolerant against simple errors, such as double calls of free() with the same argument, or overruns of a single byte (off-by-one bugs). Not all such errors can be protected against, however, and memory leaks can result. If MALLOC_CHECK_ is set to 0, any detected heap corruption is silently ignored; if set to 1, a diagnostic is printed on stderr; if set to 2, abort() is called immediately. This can be useful because otherwise a crash may happen much later, and the true cause for the problem is then very hard to track down.
You can use MALLOC_CHECK_ to detect or ignore your duplicate free error message. Note that the above doco is inaccurate, see http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/release-notes/es-x86
(glibc) for an accurate description. Hope this helps.