libmemcache, various minor questions

John McCaskey johnm at klir.com
Mon Dec 6 16:46:29 PST 2004


Here is code to reproduce my mc_aget issue:

/* This is a test program for the memcache C API */

#include <err.h>
#include <sysexits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#include "libmemcache.h"

void test_add(struct memcache *mc, const u_int32_t);
void test_aget(struct memcache *mc, const char *key, const u_int32_t);

int
main(int argc, char *argv[]) {
  struct memcache *mc = NULL;
  mc = mc_new();
  if (mc == NULL)
    err(EX_OSERR, "Unable to allocate a new memcache object");

  mc_server_add(mc, "127.0.0.1", "21211");

  mc_add(mc, "foo", strlen("foo"), "test", strlen("test"), 0, 0);

  test_aget(mc, "foo", 5);

  mc_free(mc);

  return EX_OK;
}


void
test_aget(struct memcache *mc, const char *key, const u_int32_t count) {
  void *val;
  u_int32_t i;

  for (i = 0; i < count; i++) {
    val = mc_aget(mc, key, strlen(key));
    if (val != NULL) {
      printf("%s", (char *)val);
      free(val);
    }
  }
}


Using this code foo get stored correctly as "test", and can later be
retrieved by other methods, but the mc_aget method returns seemingly
random memory addresses that do not match up.

Am I misunderstanding how I should use mc_aget?


On Mon, 2004-12-06 at 16:28 -0800, John McCaskey wrote:
> With gcc under linux I get alot of:
> 
> external/libmemcache/libmemcache.c:208: warning: assignment discards
> qualifiers from pointer target type
> 
> type warnings, looks like all it takes to avoid these is to explicitly
> cast away the const qualifier.  Is there a reason why this isn't being
> done (doesn't work on other platforms maybe?)?  I know the warning is
> nothing to worry about, but I just hate seeing them in my otherwise
> warning free code :)
> 
> Also, it looks like the examples on the libmemcache page need some
> updating, the order of arguments to mc_aget for example is incorrect!
> 
> And finally, I seemed to have alot of trouble using mc_aget with the
> correct value not being returned, and ultimately freeing the memory
> resulting in stack corruption.  I need to isolate out my code and try to
> reproduce this with a simple test case, if I can I'll report back.  When
> I swithced to using mc_req_add, mc_get, etc, I had no further issues.
> 
> Any known issues with mc_aget I should be aware of?
> 
-- 
John A. McCaskey
Software Development Engineer
Klir Technologies, Inc.
johnm at klir.com
206.902.2027


More information about the memcached mailing list