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); }