File libmemcache-1.4.0.rc2.patch of Package libmemcache

diff -Naur reference/libmemcache-1.4.0.rc2/src/memcache.c patched/libmemcache-1.4.0.rc2/src/memcache.c
--- reference/libmemcache-1.4.0.rc2/src/memcache.c	2006-07-05 23:16:59.000000000 +0000
+++ patched/libmemcache-1.4.0.rc2/src/memcache.c	2006-07-06 14:38:49.000000000 +0000
@@ -978,17 +978,17 @@
 
 int
 mcm_err_filter_add(struct memcache_ctxt *ctxt, const u_int32_t err_mask) {
-  if ((ctxt->MCM_ERR_MASK & err_mask) == ctxt->MCM_ERR_MASK)
+  if ((ctxt->MCM_ERR_MASK & err_mask) == err_mask)
     return 0;
 
-  ctxt->MCM_ERR_MASK &= err_mask;
+  ctxt->MCM_ERR_MASK |= err_mask;
   return 1;
 }
 
 
 int
 mcm_err_filter_del(struct memcache_ctxt *ctxt, const u_int32_t err_mask) {
-  if ((ctxt->MCM_ERR_MASK & err_mask) == ctxt->MCM_ERR_MASK)
+  if ((ctxt->MCM_ERR_MASK & err_mask) == 0)
     return 0;
 
   ctxt->MCM_ERR_MASK &= ~err_mask;
@@ -1131,6 +1131,8 @@
     /* Even though we haven't sent the request, mark the response as
      * having been attempted. */
     res->_flags |= MCM_RES_ATTEMPTED;
+    /* This res might have been used before, so reset found flag */
+    res->_flags &= ~MCM_RES_FOUND;
 
     /* While we're looping, might as well see if we should be auto
      * deleting any of these keys. */
diff -Naur reference/libmemcache-1.4.0.rc2/test/benchmark/benchmark.c patched/libmemcache-1.4.0.rc2/test/benchmark/benchmark.c
--- reference/libmemcache-1.4.0.rc2/test/benchmark/benchmark.c	2006-02-21 07:58:55.000000000 +0000
+++ patched/libmemcache-1.4.0.rc2/test/benchmark/benchmark.c	2006-07-06 14:33:45.000000000 +0000
@@ -70,7 +70,7 @@
     tests = strdup(argv[3]);
 
   if (tests == NULL)
-    tests = strdup("adgs");
+    tests = strdup("adgGs");
 
   if (valsize == 0)
     valsize = 50;
@@ -138,6 +138,30 @@
     printf(fmt, "get", num_tests / tt(&t1, &t2), tt(&t1, &t2), tt(&t1, &t2) / num_tests);
   }
 
+  /* same get benchmark, but with overhead for each request. */
+  if (strchr(tests, (int)'G') != NULL) {
+    /* BEGIN get request */
+    if (gettimeofday(&t1, NULL) != 0)
+      err(EX_OSERR, "gettimeofday(2)");
+
+    for (i = 0; i < num_tests; i++) {
+      req = mc_req_new();
+      res = mc_req_add(req, key, keylen);
+      res->size = valsize;
+      res->val = malloc(res->size);
+      mc_res_free_on_delete(res, 1);
+
+      mc_get(mc, req);
+      mc_req_free(req);
+    }
+
+    if (gettimeofday(&t2, NULL) != 0)
+      err(EX_OSERR, "gettimeofday(2)");
+
+    /* END get test */
+    printf(fmt, "fget", num_tests / tt(&t1, &t2), tt(&t1, &t2), tt(&t1, &t2) / num_tests);
+  }
+
 
 
   if (strchr(tests, 'a') != NULL || strchr(tests, 'd') != NULL) {
diff -Naur reference/libmemcache-1.4.0.rc2/test/regress/regress.c patched/libmemcache-1.4.0.rc2/test/regress/regress.c
--- reference/libmemcache-1.4.0.rc2/test/regress/regress.c	2006-02-21 07:58:56.000000000 +0000
+++ patched/libmemcache-1.4.0.rc2/test/regress/regress.c	2006-07-06 14:41:26.000000000 +0000
@@ -33,6 +33,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <assert.h>
 
 #include <memcache.h>
 
@@ -70,9 +71,14 @@
     num_tests = 10;
 
   mc = mc_new();
-  mc_err_filter_del(MCM_ERR_LVL_INFO);
-  mc_err_filter_del(MCM_ERR_LVL_NOTICE);
-
+  /* test filter add/del and make sure info and level are NOT filtered out */
+  assert(mc_err_filter_del(MCM_ERR_LVL_INFO) == 0);
+  assert(mc_err_filter_del(MCM_ERR_LVL_NOTICE) == 0);
+  assert(mc_err_filter_add(MCM_ERR_LVL_NOTICE) == 1);
+  assert(mc_err_filter_add(MCM_ERR_LVL_NOTICE) == 0);
+  assert(mc_err_filter_del(MCM_ERR_LVL_NOTICE) == 1);
+  assert(mc_err_filter_get() == 0);
+  
   if (mc == NULL)
     err(EX_OSERR, "Unable to allocate a new memcache object");
 
openSUSE Build Service is sponsored by