$NetBSD: patch-ba,v 1.4 2011/07/08 08:02:57 manu Exp $ glibc dirname() modify the string it is given and returns it. glusterfs takes this behavior for granted, and assume that if it gives a malloc'ed string to dirname(), then it can free()) the return value. Here is what SUSv2 says: http://opengroup.org/onlinepubs/007908799/xsh/dirname.html "The dirname() function may modify the string pointed to by path, and may return a pointer to static storage" At least NetBSD returns a static storage. glusterfs will return it to a calling function that has the responsability to free it, causing a SIGSEGV. --- xlators/performance/stat-prefetch/src/stat-prefetch.c.orig 2011-04-22 19:37:28.000000000 +0200 +++ xlators/performance/stat-prefetch/src/stat-prefetch.c 2011-05-19 12:41:28.000000000 +0200 @@ -949,18 +949,24 @@ path = dirname (cpy); switch (i) { case 0: - *parent = path; + *parent = gf_strdup (path); + if (*parent == NULL) + goto out; break; case 1: - *grand_parent = path; + *grand_parent = gf_strdup (path); + if (*grand_parent == NULL) + goto out; break; } } ret = 0; out: + if (cpy != NULL) + GF_FREE(cpy); return ret; }