problem with libmemcache
gavin hurley
gavin at jtllc.com
Fri Apr 1 19:32:47 PST 2005
I have a problem with libmemcache and I don't know if it's a problem
with my C skills (which are quite rusty; them newfangled garbage
collected languages have made me soft) or libmemcache itself. So far,
the evidence is in favor of a problem with libmemcache.
I have a very simple test program that writes a key/value pair to the
cache and then gets that value back. Most values work okay but when the
payload is 12 characters long I have a problem with what's returned. I
get back 15 characters instead of 12. The extras are non-printable and
they seem somewhat random (suspiciously like uninitialized memory)
except that they're always the same.
If I change the payload to make it 11 or 13 charecters long, it works
beautifully. Also, it doesn't seem to have anything to do with the
length of the key. I've been debugging for hours but I can't quite
figure out what's going on in libmemcache when it does the memory
allocation for mc_aget.
Anyway, here's the program. My environment is Linux. Basically, I'm
looking for someone to either show that I'm an idiot or bring awareness
to a bug in libmemcache. Many thanks.
Oh, almost forgot. When I compile and run this on my Mac (FreeBSD core)
I get the same problem when the payload is 2 characters (and other
lengths as well). 12 characters seems to be okay.
-gsh
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "memcache.h"
int main () {
struct memcache *mc = NULL;
mc = mc_new();
if (mc == NULL) {
printf("unable to allocate memcache instance. aborting\n");
exit(1);
}
mc_server_add(mc, "127.0.0.1", "11211");
char* key = "test_foo";
char* payload = "123456789012"; /*payloads of length 12 won't work
*/
void* result;
printf("payload: %s \n", payload);
mc_set(mc, key, strlen(key), payload, strlen(payload), 0, 0);
result = mc_aget(mc, key, strlen(key));
printf("returned from cache: %s length %d \n\n",
(char *)result, strlen(result));
free(result);
mc_server_disconnect_all(mc);
mc_free(mc);
return 0;
}
More information about the memcached
mailing list