[Gluster-devel] in dict.c, this gets replace by environment

Emmanuel Dreyfus manu at netbsd.org
Thu Aug 14 04:35:09 UTC 2014


Just in case someone has an idea why this happens: From time to time on
NetBSD, gluster randomly crashes because "this" gets replaced by process
environment. Here is an example:

#3  0xbb75afb2 in dict_get (this=0xbb140628, 
    key=0xbb23669a "transport.address-family") at dict.c:380
(gdb) list
375             if (!this || !key) {
376                     gf_log_callingfn ("dict", GF_LOG_INFO,
377                                       "!this || key=%s", (key) ? key :
"()");
378                     return NULL;
379             }
380     if (this->hash_size < 0) abort();
381     
382             LOCK (&this->lock);
383     
384             pair = _dict_lookup (this, key);

Note I added the if (this->hash_size < 0) abort(); to catch the problem early.
"this" is completely corrupted:

(gdb) print *this
$2 = {is_static = 1 '\001', hash_size = -1082130687, count = -1082130674, 
  refcount = -1082130649, members = 0xbf7fff2e, members_list = 0xbf7fff39, 
  extra_free = 0xbf7fff41 "HARNESS_VERSION=3.26", 
  extra_stdfree = 0xbf7fff56 "SU_FROM=root", lock = {pts_magic = 3212836707, 
    pts_spin = 112 'p', pts_flags = -1082130523}, 
  members_internal = 0xbf7fffb6, free_pair = {hash_next = 0xbb185411, 
    prev = 0x0, next = 0x0, value = 0x0, key = 0x0}, 
  free_pair_in_use = _gf_false}

Hex output give a better hint at the problem:

(gdb) x/10wx this
0xbb140628:     0xbf7ffeed      0xbf7fff01      0xbf7fff0e      0xbf7fff27
0xbb140638:     0xbf7fff2e      0xbf7fff39      0xbf7fff41      0xbf7fff56
0xbb140648:     0xbf7fff63      0xbf7fff70
(gdb) x/1s 0xbf7ffeed
0xbf7ffeed:      "MAIL=/var/mail/root"
(gdb) x/1s 0xbf7fff01
0xbf7fff01:      "BLOCKSIZE=1k"
(gdb) x/1s 0xbf7fff0e
0xbf7fff0e:      "PWD=/autobuild/glusterfs"


Oddly, rebooting the machine fixes the problem.

-- 
Emmanuel Dreyfus
http://hcpnet.free.fr/pubz
manu at netbsd.org


More information about the Gluster-devel mailing list