<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>memcached_dtrace.d</filename>
    </added>
    <added>
      <filename>memcached_dtrace.h</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -3,8 +3,22 @@ bin_PROGRAMS = memcached memcached-debug
 memcached_SOURCES = memcached.c slabs.c slabs.h items.c items.h assoc.c assoc.h memcached.h thread.c stats.c stats.h
 memcached_debug_SOURCES = $(memcached_SOURCES)
 memcached_CPPFLAGS = -DNDEBUG
-memcached_LDADD = @LIBOBJS@
-memcached_debug_LDADD = $(memcached_LDADD)
+memcached_LDADD = @DTRACE_OBJ@ @DAEMON_OBJ@ 
+memcached_debug_LDADD = @DTRACE_DEBUG_OBJ@ @DAEMON_OBJ@
+memcached_DEPENDENCIES = @DTRACE_OBJ@ @DAEMON_OBJ@
+memcached_debug_DEPENDENCIES = @DTRACE_DEBUG_OBJ@ @DAEMON_OBJ@
+
+memcached_dtrace.h:
+	${DTRACE} -h -s memcached_dtrace.d 
+	sed -e s,_DTRACE_VERSION,ENABLE_DTRACE,g memcached_dtrace.h | \
+            tr '\t' ' ' | grep -v unistd.h &gt; memcached_dtrace.tmp
+	mv memcached_dtrace.tmp memcached_dtrace.h
+
+memcached_dtrace.o: $(memcached_OBJECTS)
+	$(DTRACE) $(DTRACEFLAGS) -G -o memcached_dtrace.o -s ${srcdir}/memcached_dtrace.d $(memcached_OBJECTS)
+
+memcached_debug_dtrace.o: $(memcached_debug_OBJECTS)
+	$(DTRACE) $(DTRACEFLAGS) -G -o memcached_debug_dtrace.o -s ${srcdir}/memcached_dtrace.d $(memcached_debug_OBJECTS)
 
 SUBDIRS = doc
 DIST_DIRS = scripts</diff>
      <filename>Makefile.am</filename>
    </modified>
    <modified>
      <diff>@@ -496,14 +496,18 @@ item *assoc_find(const char *key, const size_t nkey) {
         it = primary_hashtable[hv &amp; hashmask(hashpower)];
     }
 
+    item *ret = NULL;
+    int depth = 0;
     while (it) {
-        if ((nkey == it-&gt;nkey) &amp;&amp;
-            (memcmp(key, ITEM_key(it), nkey) == 0)) {
-            return it;
+        if ((nkey == it-&gt;nkey) &amp;&amp; (memcmp(key, ITEM_key(it), nkey) == 0)) {
+            ret = it;
+            break;
         }
         it = it-&gt;h_next;
+        ++depth;
     }
-    return 0;
+    MEMCACHED_ASSOC_FIND(key, depth);
+    return ret;
 }
 
 /* returns the address of the item pointer before the key.  if *item == 0,
@@ -595,6 +599,7 @@ int assoc_insert(item *it) {
         assoc_expand();
     }
 
+    MEMCACHED_ASSOC_INSERT(ITEM_key(it), hash_items);
     return 1;
 }
 
@@ -602,10 +607,15 @@ void assoc_delete(const char *key, const size_t nkey) {
     item **before = _hashitem_before(key, nkey);
 
     if (*before) {
-        item *nxt = (*before)-&gt;h_next;
+        item *nxt;
+        hash_items--;
+        /* The DTrace probe cannot be triggered as the last instruction
+         * due to possible tail-optimization by the compiler
+         */
+        MEMCACHED_ASSOC_DELETE(key, hash_items);
+        nxt = (*before)-&gt;h_next;
         (*before)-&gt;h_next = 0;   /* probably pointless, but whatever. */
         *before = nxt;
-        hash_items--;
         return;
     }
     /* Note:  we never actually get here.  the callers don't delete things</diff>
      <filename>assoc.c</filename>
    </modified>
    <modified>
      <diff>@@ -9,6 +9,25 @@ AC_PROG_CC
 AM_PROG_CC_C_O
 AC_PROG_INSTALL
 
+AC_ARG_ENABLE(dtrace,
+  [AS_HELP_STRING([--enable-dtrace],[Enable dtrace probes])])
+if test &quot;x$enable_dtrace&quot; == &quot;xyes&quot;; then
+  AC_PATH_PROG([DTRACE], [dtrace], &quot;no&quot;, [/usr/sbin:$PATH])
+  if test &quot;x$DTRACE&quot; != &quot;xno&quot;; then
+    AC_DEFINE([ENABLE_DTRACE],1,[Set to nonzero if you want to include DTRACE])
+    DTRACE_OBJ=memcached_dtrace.o
+    DTRACE_DEBUG_OBJ=memcached_debug_dtrace.o
+  else
+    AC_MSG_ERROR([Need dtrace binary and OS support.])
+  fi
+else
+    AC_DEFINE([ENABLE_DTRACE],0,[Set to nonzero if you want to include DTRACE])
+fi
+AC_SUBST(DTRACE)
+AC_SUBST(DTRACE_OBJ)
+AC_SUBST(DTRACE_DEBUG_OBJ)
+AC_SUBST(DTRACEFLAGS)
+
 AC_ARG_ENABLE(64bit,
   [AS_HELP_STRING([--enable-64bit],[build 64bit verison])])
 if test &quot;x$enable_64bit&quot; == &quot;xyes&quot;
@@ -113,7 +132,8 @@ AC_SEARCH_LIBS(socket, socket)
 AC_SEARCH_LIBS(gethostbyname, nsl)
 AC_SEARCH_LIBS(mallinfo, malloc)
 
-AC_CHECK_FUNC(daemon,AC_DEFINE([HAVE_DAEMON],,[Define this if you have daemon()]),[AC_LIBOBJ(daemon)])
+AC_CHECK_FUNC(daemon,AC_DEFINE([HAVE_DAEMON],,[Define this if you have daemon()]),[DAEMON_OBJ=daemon.o])
+AC_SUBST(DAEMON_OBJ)
 
 AC_HEADER_STDBOOL
 AC_C_CONST</diff>
      <filename>configure.ac</filename>
    </modified>
    <modified>
      <diff>@@ -229,6 +229,7 @@ static void item_unlink_q(item *it) {
 }
 
 int do_item_link(item *it) {
+    MEMCACHED_ITEM_LINK(ITEM_key(it), it-&gt;nbytes);
     assert((it-&gt;it_flags &amp; (ITEM_LINKED|ITEM_SLABBED)) == 0);
     assert(it-&gt;nbytes &lt; (1024 * 1024));  /* 1MB max size */
     it-&gt;it_flags |= ITEM_LINKED;
@@ -250,6 +251,7 @@ int do_item_link(item *it) {
 }
 
 void do_item_unlink(item *it) {
+    MEMCACHED_ITEM_UNLINK(ITEM_key(it), it-&gt;nbytes);
     if ((it-&gt;it_flags &amp; ITEM_LINKED) != 0) {
         it-&gt;it_flags &amp;= ~ITEM_LINKED;
         STATS_LOCK();
@@ -263,6 +265,7 @@ void do_item_unlink(item *it) {
 }
 
 void do_item_remove(item *it) {
+    MEMCACHED_ITEM_REMOVE(ITEM_key(it), it-&gt;nbytes);
     assert((it-&gt;it_flags &amp; ITEM_SLABBED) == 0);
     if (it-&gt;refcount != 0) {
         it-&gt;refcount--;
@@ -275,6 +278,7 @@ void do_item_remove(item *it) {
 }
 
 void do_item_update(item *it) {
+    MEMCACHED_ITEM_UPDATE(ITEM_key(it), it-&gt;nbytes);
     if (it-&gt;time &lt; current_time - ITEM_UPDATE_INTERVAL) {
         assert((it-&gt;it_flags &amp; ITEM_SLABBED) == 0);
 
@@ -287,6 +291,8 @@ void do_item_update(item *it) {
 }
 
 int do_item_replace(item *it, item *new_it) {
+    MEMCACHED_ITEM_REPLACE(ITEM_key(it), it-&gt;nbytes,
+                           ITEM_key(new_it), new_it-&gt;nbytes);
     assert((it-&gt;it_flags &amp; ITEM_SLABBED) == 0);
 
     do_item_unlink(it);</diff>
      <filename>items.c</filename>
    </modified>
    <modified>
      <diff>@@ -301,6 +301,8 @@ conn *conn_new(const int sfd, const int init_state, const int event_flags,
             fprintf(stderr, &quot;calloc()\n&quot;);
             return NULL;
         }
+        MEMCACHED_CONN_CREATE(c);
+
         c-&gt;rbuf = c-&gt;wbuf = 0;
         c-&gt;ilist = 0;
         c-&gt;suffixlist = 0;
@@ -325,13 +327,7 @@ conn *conn_new(const int sfd, const int init_state, const int event_flags,
 
         if (c-&gt;rbuf == 0 || c-&gt;wbuf == 0 || c-&gt;ilist == 0 || c-&gt;iov == 0 ||
                 c-&gt;msglist == 0 || c-&gt;suffixlist == 0) {
-            if (c-&gt;rbuf != 0) free(c-&gt;rbuf);
-            if (c-&gt;wbuf != 0) free(c-&gt;wbuf);
-            if (c-&gt;ilist !=0) free(c-&gt;ilist);
-            if (c-&gt;suffixlist != 0) free(c-&gt;suffixlist);
-            if (c-&gt;iov != 0) free(c-&gt;iov);
-            if (c-&gt;msglist != 0) free(c-&gt;msglist);
-            free(c);
+            conn_free(c);
             fprintf(stderr, &quot;malloc()\n&quot;);
             return NULL;
         }
@@ -391,6 +387,8 @@ conn *conn_new(const int sfd, const int init_state, const int event_flags,
     stats.total_conns++;
     STATS_UNLOCK();
 
+    MEMCACHED_CONN_ALLOCATE(c-&gt;sfd);
+
     return c;
 }
 
@@ -427,6 +425,7 @@ static void conn_cleanup(conn *c) {
  */
 void conn_free(conn *c) {
     if (c) {
+        MEMCACHED_CONN_DESTROY(c);
         if (c-&gt;hdrbuf)
             free(c-&gt;hdrbuf);
         if (c-&gt;msglist)
@@ -454,6 +453,7 @@ static void conn_close(conn *c) {
     if (settings.verbose &gt; 1)
         fprintf(stderr, &quot;&lt;%d connection closed.\n&quot;, c-&gt;sfd);
 
+    MEMCACHED_CONN_RELEASE(c-&gt;sfd);
     close(c-&gt;sfd);
     accept_new_conns(true);
     conn_cleanup(c);
@@ -543,6 +543,10 @@ static void conn_set_state(conn *c, int state) {
             assoc_move_next_bucket();
         }
         c-&gt;state = state;
+
+        if (state == conn_write) {
+            MEMCACHED_PROCESS_COMMAND_END(c-&gt;sfd, c-&gt;wbuf, c-&gt;wbytes);
+        }
     }
 }
 
@@ -784,9 +788,32 @@ static void complete_nread(conn *c) {
         out_string(c, &quot;CLIENT_ERROR bad data chunk&quot;);
     } else {
       ret = store_item(it, comm);
-      if (ret == 1)
+      if (ret == 1) {
           out_string(c, &quot;STORED&quot;);
-      else if(ret == 2)
+#ifdef HAVE_DTRACE
+          switch (comm) {
+          case NREAD_ADD:
+              MEMCACHED_COMMAND_ADD(c-&gt;sfd, ITEM_key(it), it-&gt;nbytes);
+              break;
+          case NREAD_REPLACE:
+              MEMCACHED_COMMAND_REPLACE(c-&gt;sfd, ITEM_key(it), it-&gt;nbytes);
+              break;
+          case NREAD_APPEND:
+              MEMCACHED_COMMAND_APPEND(c-&gt;sfd, ITEM_key(it), it-&gt;nbytes);
+              break;
+          case NREAD_PREPEND:
+              MEMCACHED_COMMAND_PREPEND(c-&gt;sfd, ITEM_key(it), it-&gt;nbytes);
+              break;
+          case NREAD_SET:
+              MEMCACHED_COMMAND_SET(c-&gt;sfd, ITEM_key(it), it-&gt;nbytes);
+              break;
+          case NREAD_CAS:
+              MEMCACHED_COMMAND_CAS(c-&gt;sfd, ITEM_key(it), it-&gt;nbytes,
+                                    it-&gt;cas_id);
+              break;
+          }
+#endif
+      } else if(ret == 2)
           out_string(c, &quot;EXISTS&quot;);
       else if(ret == 3)
           out_string(c, &quot;NOT_FOUND&quot;);
@@ -1268,6 +1295,8 @@ static inline void process_get_command(conn *c, token_t *tokens, size_t ntokens,
 
                 if(return_cas == true)
                 {
+                  MEMCACHED_COMMAND_GETS(c-&gt;sfd, ITEM_key(it), it-&gt;nbytes,
+                                         it-&gt;cas_id);
                   /* Goofy mid-flight realloc. */
                   if (i &gt;= c-&gt;suffixsize) {
                     char **new_suffix_list = realloc(c-&gt;suffixlist,
@@ -1306,6 +1335,8 @@ static inline void process_get_command(conn *c, token_t *tokens, size_t ntokens,
                 }
                 else
                 {
+                  MEMCACHED_COMMAND_GET(c-&gt;sfd, ITEM_key(it), it-&gt;nbytes);
+
                   if (add_iov(c, &quot;VALUE &quot;, 6) != 0 ||
                       add_iov(c, ITEM_key(it), it-&gt;nkey) != 0 ||
                       add_iov(c, ITEM_suffix(it), it-&gt;nsuffix + it-&gt;nbytes) != 0)
@@ -1327,6 +1358,11 @@ static inline void process_get_command(conn *c, token_t *tokens, size_t ntokens,
 
             } else {
                 stats_get_misses++;
+                if (return_cas) {
+                    MEMCACHED_COMMAND_GETS(c-&gt;sfd, key, -1, 0);
+                } else {
+                    MEMCACHED_COMMAND_GET(c-&gt;sfd, key, -1);
+                }
             }
 
             key_token++;
@@ -1508,13 +1544,14 @@ static void process_arithmetic_command(conn *c, token_t *tokens, const size_t nt
         return;
     }
 
-    out_string(c, add_delta(it, incr, delta, temp));
+    out_string(c, add_delta(c, it, incr, delta, temp));
     item_remove(it);         /* release our reference */
 }
 
 /*
  * adds a delta value to a numeric item.
  *
+ * c     connection requesting the operation
  * it    item to adjust
  * incr  true to increment value, false to decrement
  * delta amount to adjust value by
@@ -1522,7 +1559,7 @@ static void process_arithmetic_command(conn *c, token_t *tokens, const size_t nt
  *
  * returns a response string to send back to the client.
  */
-char *do_add_delta(item *it, const bool incr, const int64_t delta, char *buf) {
+char *do_add_delta(conn *c, item *it, const bool incr, const int64_t delta, char *buf) {
     char *ptr;
     int64_t value;
     int res;
@@ -1536,11 +1573,13 @@ char *do_add_delta(item *it, const bool incr, const int64_t delta, char *buf) {
         return &quot;CLIENT_ERROR cannot increment or decrement non-numeric value&quot;;
     }
 
-    if (incr)
+    if (incr) {
         value += delta;
-    else {
+        MEMCACHED_COMMAND_INCR(c-&gt;sfd, ITEM_key(it), value);
+    } else {
         if (delta &gt;= value) value = 0;
         else value -= delta;
+        MEMCACHED_COMMAND_DECR(c-&gt;sfd, ITEM_key(it), value);
     }
     sprintf(buf, &quot;%llu&quot;, value);
     res = strlen(buf);
@@ -1608,6 +1647,7 @@ static void process_delete_command(conn *c, token_t *tokens, const size_t ntoken
 
     it = item_get(key, nkey);
     if (it) {
+        MEMCACHED_COMMAND_DELETE(c-&gt;sfd, ITEM_key(it), exptime);
         if (exptime == 0) {
             item_unlink(it);
             item_remove(it);      /* release our reference */
@@ -1672,6 +1712,8 @@ static void process_command(conn *c, char *command) {
 
     assert(c != NULL);
 
+    MEMCACHED_PROCESS_COMMAND_START(c-&gt;sfd, c-&gt;rcurr, c-&gt;rbytes);
+
     if (settings.verbose &gt; 1)
         fprintf(stderr, &quot;&lt;%d %s\n&quot;, c-&gt;sfd, command);
 </diff>
      <filename>memcached.c</filename>
    </modified>
    <modified>
      <diff>@@ -240,7 +240,8 @@ char *do_suffix_from_freelist();
 bool do_suffix_add_to_freelist(char *s);
 char *do_defer_delete(item *item, time_t exptime);
 void do_run_deferred_deletes(void);
-char *do_add_delta(item *item, const bool incr, const int64_t delta, char *buf);
+char *do_add_delta(conn *c, item *item, const bool incr, const int64_t delta,
+                   char *buf);
 int do_store_item(item *item, int comm);
 conn *conn_new(const int sfd, const int init_state, const int event_flags, const int read_buffer_size, const bool is_udp, struct event_base *base);
 
@@ -249,7 +250,7 @@ conn *conn_new(const int sfd, const int init_state, const int event_flags, const
 #include &quot;slabs.h&quot;
 #include &quot;assoc.h&quot;
 #include &quot;items.h&quot;
-
+#include &quot;memcached_dtrace.h&quot;
 
 /*
  * In multithreaded mode, we wrap certain functions with lock management and
@@ -271,7 +272,8 @@ int  dispatch_event_add(int thread, conn *c);
 void dispatch_conn_new(int sfd, int init_state, int event_flags, int read_buffer_size, int is_udp);
 
 /* Lock wrappers for cache functions that are called from main loop. */
-char *mt_add_delta(item *item, const int incr, const int64_t delta, char *buf);
+char *mt_add_delta(conn *c, item *item, const int incr, const int64_t delta,
+                   char *buf);
 void mt_assoc_move_next_bucket(void);
 conn *mt_conn_from_freelist(void);
 bool  mt_conn_add_to_freelist(conn *c);
@@ -300,7 +302,7 @@ void  mt_stats_unlock(void);
 int   mt_store_item(item *item, int comm);
 
 
-# define add_delta(x,y,z,a)          mt_add_delta(x,y,z,a)
+# define add_delta(c,x,y,z,a)        mt_add_delta(c,x,y,z,a)
 # define assoc_move_next_bucket()    mt_assoc_move_next_bucket()
 # define conn_from_freelist()        mt_conn_from_freelist()
 # define conn_add_to_freelist(x)     mt_conn_add_to_freelist(x)
@@ -331,7 +333,7 @@ int   mt_store_item(item *item, int comm);
 
 #else /* !USE_THREADS */
 
-# define add_delta(x,y,z,a)          do_add_delta(x,y,z,a)
+# define add_delta(c,x,y,z,a)          do_add_delta(c,x,y,z,a)
 # define assoc_move_next_bucket()    do_assoc_move_next_bucket()
 # define conn_from_freelist()        do_conn_from_freelist()
 # define conn_add_to_freelist(x)     do_conn_add_to_freelist(x)</diff>
      <filename>memcached.h</filename>
    </modified>
    <modified>
      <diff>@@ -200,13 +200,13 @@ static int do_slabs_newslab(const unsigned int id) {
 #endif
     char *ptr;
 
-    if (mem_limit &amp;&amp; mem_malloced + len &gt; mem_limit &amp;&amp; p-&gt;slabs &gt; 0)
-        return 0;
-
-    if (grow_slab_list(id) == 0) return 0;
+    if ((mem_limit &amp;&amp; mem_malloced + len &gt; mem_limit &amp;&amp; p-&gt;slabs &gt; 0) ||
+        (grow_slab_list(id) == 0) ||
+        ((ptr = memory_allocate((size_t)len)) == 0)) {
 
-    ptr = memory_allocate((size_t)len);
-    if (ptr == 0) return 0;
+        MEMCACHED_SLABS_SLABCLASS_ALLOCATE_FAILED(id);
+        return 0;
+    }
 
     memset(ptr, 0, (size_t)len);
     p-&gt;end_page_ptr = ptr;
@@ -214,47 +214,62 @@ static int do_slabs_newslab(const unsigned int id) {
 
     p-&gt;slab_list[p-&gt;slabs++] = ptr;
     mem_malloced += len;
+
+    MEMCACHED_SLABS_SLABCLASS_ALLOCATE(id);
     return 1;
 }
 
 /*@null@*/
 void *do_slabs_alloc(const size_t size, unsigned int id) {
     slabclass_t *p;
+    void *ret = NULL;
 
-    if (id &lt; POWER_SMALLEST || id &gt; power_largest)
+    if (id &lt; POWER_SMALLEST || id &gt; power_largest) {
+        MEMCACHED_SLABS_ALLOCATE_FAILED(size, 0);
         return NULL;
+    }
 
     p = &amp;slabclass[id];
     assert(p-&gt;sl_curr == 0 || ((item *)p-&gt;slots[p-&gt;sl_curr - 1])-&gt;slabs_clsid == 0);
 
 #ifdef USE_SYSTEM_MALLOC
-    if (mem_limit &amp;&amp; mem_malloced + size &gt; mem_limit)
+    if (mem_limit &amp;&amp; mem_malloced + size &gt; mem_limit) {
+        MEMCACHED_SLABS_ALLOCATE_FAILED(size, id);
         return 0;
+    }
     mem_malloced += size;
-    return malloc(size);
+    ret = malloc(size);
+    MEMCACHED_SLABS_ALLOCATE(size, id, 0, ret);
+    return ret;
 #endif
 
     /* fail unless we have space at the end of a recently allocated page,
        we have something on our freelist, or we could allocate a new page */
-    if (! (p-&gt;end_page_ptr != 0 || p-&gt;sl_curr != 0 || do_slabs_newslab(id) != 0))
-        return 0;
-
-    /* return off our freelist, if we have one */
-    if (p-&gt;sl_curr != 0)
-        return p-&gt;slots[--p-&gt;sl_curr];
-
-    /* if we recently allocated a whole page, return from that */
-    if (p-&gt;end_page_ptr) {
-        void *ptr = p-&gt;end_page_ptr;
+    if (! (p-&gt;end_page_ptr != 0 || p-&gt;sl_curr != 0 ||
+           do_slabs_newslab(id) != 0)) {
+        /* We don't have more memory available */
+        ret = NULL;
+    } else if (p-&gt;sl_curr != 0) {
+        /* return off our freelist */
+        ret = p-&gt;slots[--p-&gt;sl_curr];
+    } else {
+        /* if we recently allocated a whole page, return from that */
+        assert(p-&gt;end_page_ptr != NULL);
+        ret = p-&gt;end_page_ptr;
         if (--p-&gt;end_page_free != 0) {
             p-&gt;end_page_ptr += p-&gt;size;
         } else {
             p-&gt;end_page_ptr = 0;
         }
-        return ptr;
     }
 
-    return NULL;  /* shouldn't ever get here */
+    if (ret) {
+        MEMCACHED_SLABS_ALLOCATE(size, id, p-&gt;size, ret);
+    } else {
+        MEMCACHED_SLABS_ALLOCATE_FAILED(size, id);
+    }
+
+    return ret;
 }
 
 void do_slabs_free(void *ptr, const size_t size, unsigned int id) {
@@ -265,6 +280,7 @@ void do_slabs_free(void *ptr, const size_t size, unsigned int id) {
     if (id &lt; POWER_SMALLEST || id &gt; power_largest)
         return;
 
+    MEMCACHED_SLABS_FREE(size, id, ptr);
     p = &amp;slabclass[id];
 
 #ifdef USE_SYSTEM_MALLOC</diff>
      <filename>slabs.c</filename>
    </modified>
    <modified>
      <diff>@@ -381,6 +381,8 @@ void dispatch_conn_new(int sfd, int init_state, int event_flags,
     item-&gt;is_udp = is_udp;
 
     cq_push(&amp;threads[thread].new_conn_queue, item);
+
+    MEMCACHED_CONN_DISPATCH(sfd, threads[thread].thread_id);
     if (write(threads[thread].notify_send_fd, &quot;&quot;, 1) != 1) {
         perror(&quot;Writing to thread notify pipe&quot;);
     }
@@ -495,11 +497,12 @@ char *mt_defer_delete(item *item, time_t exptime) {
 /*
  * Does arithmetic on a numeric item value.
  */
-char *mt_add_delta(item *item, int incr, const int64_t delta, char *buf) {
+char *mt_add_delta(conn *c, item *item, int incr, const int64_t delta,
+                   char *buf) {
     char *ret;
 
     pthread_mutex_lock(&amp;cache_lock);
-    ret = do_add_delta(item, incr, delta, buf);
+    ret = do_add_delta(c, item, incr, delta, buf);
     pthread_mutex_unlock(&amp;cache_lock);
     return ret;
 }</diff>
      <filename>thread.c</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>846ddb6a311f25c3f1ef17207eef6b338f0d7c79</id>
    </parent>
  </parents>
  <author>
    <name>Trond Norbye</name>
    <email>Trond.Norbye@Sun.COM</email>
  </author>
  <url>http://github.com/dustin/memcached/commit/e4534c8552cc53ad4fd2bf431ee169b3667970aa</url>
  <id>e4534c8552cc53ad4fd2bf431ee169b3667970aa</id>
  <committed-date>2008-12-22T12:35:53-08:00</committed-date>
  <authored-date>2008-07-23T11:38:29-07:00</authored-date>
  <message>Add DTrace probes for Solaris/etc.</message>
  <tree>8ecc591b3667284620f3c3a0482096cb797038ce</tree>
  <committer>
    <name>Dustin Sallings</name>
    <email>dustin@spy.net</email>
  </committer>
</commit>
