Description of problem: All calls to dict_allocate_and_serialize() pass the address of a 32-bit type, but cast it to a 64-bit pointer type (size_t *). This happens to work on LE machines, but even if it's benign, it's still a bug. On BE machines it is not benign. Version-Release number of selected component (if applicable): All. How reproducible: build/run on a BE machine, e.g. SPARC or PPC Steps to Reproduce: 1. 2. 3. Actual results: Expected results: Additional info: Found by xinfeng.liu, email on gluster-devel mailing list
In every call to dict_allocate_and_serialize(), the underlying 'len' param is always a u_int, so: a) why is the param a size_t* ? b) and then why have extra code in GF_PROTOCOL_DICT_SERIALIZE to work around it? By changing the param in dict_allocate_and_serialize() to a u_int* we only need to fix a few files and then we have 64-bit clean code everywhere we call dict_allocate_and_serialize().
CHANGE: http://review.gluster.com/3642 (calls to dict_allocate_and_serialize() are not 64-bit clean) merged in master by Anand Avati (avati)