After I upgraded to jessie I ran into this problem as well. Then I found out that this problem has been known about for over a year and noone had done anything about it (<insert lots of swearing here>).
So I spent a good chunk of last Sunday installing debug symybol packages and even rebuilding MySQL with debug symbols enabled (since there are no symbol packages available) so I could follow the problem all the way through the code. As already indicated by the stacktrace in the original bug report, > #2 0x00007fa1fe20877b in my_malloc () from /usr/lib/x86_64-linux-gnu/libsres.so.14 > #3 0x00007fa1fc04863a in my_error_register () from /usackage libval14) r/lib/x86_64-linux-gnu/libmysqlclient.so.18 the problem is with libsres (package libval14) or rather the combination of libmysqlclient and libsres. Both libraries have a non-local function named my_malloc() - with different argument lists. Current irssi builds are linked against libsres and it seems that when a perl script executed by libperl loads libmysqlclient thru the use of DBD-MySQL the symbol my_malloc is somehow resolved to the one from libsres instead the (more local) one in libmysqlclient. Since the functions my_malloc, my_free and my_strdup from libsres *seem* to be used only by libval, I renamed them (and all references to them in libval) to libsres_malloc, libsres_free and libsres_strdup respectively. Then I rebuilt and reinstalled the packages. And tataa.. problem solved - at least for me. I've attached my patch file, but unless I'm completely wrong in my analysis, this should probably be solved upstream. --
Description: Fix for symbol clash with libmysqlclient Change names of support functions my_malloc(), my_free(), my_strdup() to libsres_malloc(), libsres_free(), libsres_strdup() to work around problems when also linking against libmysqlclient - or dynamically loading libmysqlclient at runtime (for example when using a perl script with Irssi that in turn uses DBD-MySQL to access database - see Debian bug #764551). Author: Steffen Kern <[email protected]> --- The information above should follow the Patch Tagging Guidelines, please checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here are templates for supplementary fields that you might want to add: Origin: <vendor|upstream|other>, <url of original patch> Bug: <url in upstream bugtracker> Bug-Debian: https://bugs.debian.org/<bugnumber> Bug-Ubuntu: https://launchpad.net/bugs/<bugnumber> Forwarded: <no|not-needed|url proving that it has been forwarded> Reviewed-By: <name and email of someone who approved the patch> Last-Update: <YYYY-MM-DD> --- dnsval-2.0.orig/include/validator/validator-compat.h +++ dnsval-2.0/include/validator/validator-compat.h @@ -1012,9 +1012,9 @@ struct addrinfo { #ifdef MEMORY_DEBUGGING -#define MALLOC(s) my_malloc(s, __FILE__, __LINE__) -#define FREE(p) my_free(p,__FILE__,__LINE__) -#define STRDUP(p) my_strdup(p,__FILE__,__LINE__) +#define MALLOC(s) libsres_malloc(s, __FILE__, __LINE__) +#define FREE(p) libsres_free(p,__FILE__,__LINE__) +#define STRDUP(p) libsres_strdup(p,__FILE__,__LINE__) #else #define MALLOC(s) malloc(s) #define FREE(p) free(p) --- dnsval-2.0.orig/libsres/res_support.c +++ dnsval-2.0/libsres/res_support.c @@ -91,7 +91,7 @@ res_gettimeofday_buf(char *buf, size_t b void -my_free(void *p, char *filename, int lineno) +libsres_free(void *p, char *filename, int lineno) { if (logfile == NULL) logfile = fopen(MEM_LOGFILE, "w"); @@ -103,7 +103,7 @@ my_free(void *p, char *filename, int lin } void * -my_malloc(size_t t, char *filename, int lineno) +libsres_malloc(size_t t, char *filename, int lineno) { void *p; @@ -125,7 +125,7 @@ my_malloc(size_t t, char *filename, int } char * -my_strdup(const char *str, char *filename, int lineno) +libsres_strdup(const char *str, char *filename, int lineno) { char *p = strdup(str); if (logfile == NULL) --- dnsval-2.0.orig/libsres/res_support.h +++ dnsval-2.0/libsres/res_support.h @@ -65,9 +65,9 @@ (cp) += NS_INT32SZ; \ } while (0) -void my_free(void *p, char *filename, int lineno); -void *my_malloc(size_t t, char *filename, int lineno); -char *my_strdup(const char *str, char *filename, int lineno); +void libsres_free(void *p, char *filename, int lineno); +void *libsres_malloc(size_t t, char *filename, int lineno); +char *libsres_strdup(const char *str, char *filename, int lineno); void print_response(u_char * ans, size_t resplen); void log_response(u_char * ans, size_t resplen); --- dnsval-2.0.orig/libval/val_support.h +++ dnsval-2.0/libval/val_support.h @@ -55,9 +55,9 @@ #define IT_HASNT 1 #define IT_WONT (-1) -void my_free(void *p, char *filename, int lineno); -void *my_malloc(size_t t, char *filename, int lineno); -char *my_strdup(const char *str, char *filename, int lineno); +void libsres_free(void *p, char *filename, int lineno); +void *libsres_malloc(size_t t, char *filename, int lineno); +char *libsres_strdup(const char *str, char *filename, int lineno); u_char * namename(u_char * big_name, u_char * little_name); #ifdef LIBVAL_NSEC3

