diff -rc libmemcache-1.4.0.rc2/include/memcache.h libmemcache-1.4.0.rc2-memcached1.2.2/include/memcache.h
*** libmemcache-1.4.0.rc2/include/memcache.h	2006-02-21 03:04:37.000000000 -0500
--- libmemcache-1.4.0.rc2-memcached1.2.2/include/memcache.h	2007-06-03 16:49:09.000000000 -0400
***************
*** 88,104 ****
  
  /* A handful of #define's for callbacks that discourage developers
   * from improperly using the interface. */
! #define MCM_CALLBACK_CTXT	md597f78ab4a96c3e71c3bb9fe036f37367
! #define MCM_CALLBACK_KEY	md5783365dee46035fa36d8d9e6fe15da0f
! #define MCM_CALLBACK_LEN	md54c1f40392e708222b8a25a4337cd05fd
! #define MCM_CALLBACK_MC		md5646277084faa5a0f511793a728521ef5
! #define MCM_CALLBACK_PTR	md57f5686851aeded9e00761d4aaaac20ee
! #define MCM_CALLBACK_RES	md52e8a13a74753effc0f149a3ce900dc28
! #define MCM_ERR_MASK		md5fc9f4e2249ad88de0081136fef04defa
! #define MCM_ERR_FUNC_ERR_CTXT	md5096953205b8982964e25927bd8154148
! #define MCM_ERR_FUNC_MC_CTXT	md521e67c8edeaac774b00d960e230c8686
! #define MCM_KEY_VALID_KEY	md58926735b19e189407440aa1ba3ab1962
! #define MCM_KEY_VALID_LEN	md5d6077405f1a7b35ddeac18ccc2a8f4c7
  
  /* Our initial read(2) buffer has to be long enough to read the
   * first line of the response.  ie:
--- 88,104 ----
  
  /* A handful of #define's for callbacks that discourage developers
   * from improperly using the interface. */
! #define MCM_CALLBACK_CTXT	md5md517e9be250407e8a37fb60180a76510d7
! #define MCM_CALLBACK_KEY	md5md5c029c91da86138a5ad1489427e1d71b0
! #define MCM_CALLBACK_LEN	md5md5a07b51f993c7254fcb18197565700326
! #define MCM_CALLBACK_MC		md5md5897e5e464792802e78a18e0fdd437b7c
! #define MCM_CALLBACK_PTR	md5md57b4ac6d3ad66bcb14ca7584f9a3eff43
! #define MCM_CALLBACK_RES	md5md5e252857f6eaeebe7e61573a2a5bfa564
! #define MCM_ERR_MASK		md5md51ba931bcdf1b3f122e9b86617155853e
! #define MCM_ERR_FUNC_ERR_CTXT	md5md5314e69877a17018a14789a1a7fb8025c
! #define MCM_ERR_FUNC_MC_CTXT	md5md57c7c80036a426539d819e35ebab5192f
! #define MCM_KEY_VALID_KEY	md5md5537bb21da67eb92e5898f9911c607217
! #define MCM_KEY_VALID_LEN	md5md55ecd4a9c706b439f8eebaca09eeadacf
  
  /* Our initial read(2) buffer has to be long enough to read the
   * first line of the response.  ie:
***************
*** 518,523 ****
--- 518,524 ----
    time_t uptime;
    time_t time;
    char *version;
+   u_int32_t pointer_size;
    struct timeval rusage_user;
    struct timeval rusage_system;
    u_int32_t curr_items;
***************
*** 537,545 ****
--- 538,548 ----
    u_int64_t refresh_hits;
    u_int64_t refresh_misses;
  #endif
+   u_int64_t evictions;
    u_int64_t bytes_read;
    u_int64_t bytes_written;
    u_int64_t limit_maxbytes;
+   u_int32_t threads;
  };
  
  
diff -rc libmemcache-1.4.0.rc2/src/memcache.c libmemcache-1.4.0.rc2-memcached1.2.2/src/memcache.c
*** libmemcache-1.4.0.rc2/src/memcache.c	2006-02-21 02:58:58.000000000 -0500
--- libmemcache-1.4.0.rc2-memcached1.2.2/src/memcache.c	2007-06-03 16:50:00.000000000 -0400
***************
*** 2796,2801 ****
--- 2796,2811 ----
  	  memcpy(s->version, cur, (size_t)(cp - cur));
  	  s->version[(size_t)(cp - cur)] = '\0';
  	}
+       } else if (memcmp(cur, "pointer_size ", MCM_CSTRLEN("pointer_size ")) == 0) {
+ 	cur = &cur[MCM_CSTRLEN("pointer_size ")];
+ 	s->pointer_size = (u_int32_t)strtol(cur, &cp, 10);
+ 	if (s->pointer_size == 0 && ((errno == EINVAL && cp == cur) || errno == ERANGE)) {
+ 	  MCM_ERR_MSG(MCM_ERR_LIB_STRTOL, "invalid pointer_size");
+ 	  MCM_CLEAN_BUFS(ctxt, ms);
+ 	  return NULL;
+ 	} else {
+ 	  cur = cp;
+         }
        } else if (memcmp(cur, "rusage_user ", MCM_CSTRLEN("rusage_user ")) == 0) {
  	cur = &cur[MCM_CSTRLEN("rusage_user ")];
  	s->rusage_user.tv_sec = (int32_t)strtol(cur, &cp, 10);
***************
*** 2965,2970 ****
--- 2975,2990 ----
  	} else {
  	  cur = cp;
  	}
+       } else if (memcmp(cur, "evictions ", MCM_CSTRLEN("evictions ")) == 0) {
+ 	cur = &cur[MCM_CSTRLEN("evictions ")];
+ 	s->evictions = (u_int32_t)strtol(cur, &cp, 10);
+ 	if (s->evictions == 0 && ((errno == EINVAL && cp == cur) || errno == ERANGE)) {
+ 	  MCM_ERR_MSG(MCM_ERR_LIB_STRTOL, "invalid evictions");
+ 	  MCM_CLEAN_BUFS(ctxt, ms);
+ 	  return NULL;
+ 	} else {
+ 	  cur = cp;
+         }
  #ifdef SEAN_HACKS
        } else if (memcmp(cur, "refresh_hits ", MCM_CSTRLEN("refresh_hits ")) == 0) {
  	cur = &cur[MCM_CSTRLEN("refresh_hits ")];
***************
*** 3017,3022 ****
--- 3037,3052 ----
  	} else {
  	  cur = cp;
  	}
+       } else if (memcmp(cur, "threads ", MCM_CSTRLEN("threads ")) == 0) {
+ 	cur = &cur[MCM_CSTRLEN("threads ")];
+ 	s->threads = (u_int32_t)strtol(cur, &cp, 10);
+ 	if (s->threads == 0 && ((errno == EINVAL && cp == cur) || errno == ERANGE)) {
+ 	  MCM_ERR_MSG(MCM_ERR_LIB_STRTOL, "invalid threads");
+ 	  MCM_CLEAN_BUFS(ctxt, ms);
+ 	  return NULL;
+ 	} else {
+ 	  cur = cp;
+         }
        } else {
  	for (cp = cur; !isspace(*cp); cp++);
  	MCM_WARNX_MSGLEN(MCM_ERR_UNKNOWN_STAT, cur, (int)(cp - cur));
***************
*** 3210,3223 ****
      s->time = ts->time;
      if (s->version == NULL && ts->version != NULL)
        s->version = mcm_strdup(ctxt, ts->version);
! 
      s->rusage_user.tv_sec += ts->rusage_user.tv_sec;
      s->rusage_user.tv_usec += ts->rusage_user.tv_usec;
      if (s->rusage_user.tv_usec > 1000000) {
        s->rusage_user.tv_sec += s->rusage_user.tv_usec / 1000000;
        s->rusage_user.tv_usec -= 1000000 * (s->rusage_user.tv_usec / 1000000);
      }
- 
      s->rusage_system.tv_sec += ts->rusage_system.tv_sec;
      s->rusage_system.tv_usec += ts->rusage_system.tv_usec;
      if (s->rusage_system.tv_usec > 1000000) {
--- 3240,3252 ----
      s->time = ts->time;
      if (s->version == NULL && ts->version != NULL)
        s->version = mcm_strdup(ctxt, ts->version);
!     s->pointer_size = ts->pointer_size;
      s->rusage_user.tv_sec += ts->rusage_user.tv_sec;
      s->rusage_user.tv_usec += ts->rusage_user.tv_usec;
      if (s->rusage_user.tv_usec > 1000000) {
        s->rusage_user.tv_sec += s->rusage_user.tv_usec / 1000000;
        s->rusage_user.tv_usec -= 1000000 * (s->rusage_user.tv_usec / 1000000);
      }
      s->rusage_system.tv_sec += ts->rusage_system.tv_sec;
      s->rusage_system.tv_usec += ts->rusage_system.tv_usec;
      if (s->rusage_system.tv_usec > 1000000) {
***************
*** 3242,3250 ****
--- 3271,3281 ----
      s->refresh_hits += ts->refresh_hits;
      s->refresh_misses += ts->refresh_misses;
  #endif
+     s->evictions += ts->evictions;
      s->bytes_read += ts->bytes_read;
      s->bytes_written += ts->bytes_written;
      s->limit_maxbytes += ts->limit_maxbytes;
+     s->threads += ts->threads;
  
      mcm_server_stats_free(ctxt, ts);
    }
