Index: /trunk/server/slabs.c
===================================================================
--- /trunk/server/slabs.c (revision 738)
+++ /trunk/server/slabs.c (revision 739)
@@ -258,6 +258,5 @@
 }
 
-void do_slabs_free(void *ptr, const size_t size) {
-    unsigned char id = slabs_clsid(size);
+void do_slabs_free(void *ptr, const size_t size, unsigned int id) {
     slabclass_t *p;
 
Index: /trunk/server/thread.c
===================================================================
--- /trunk/server/thread.c (revision 738)
+++ /trunk/server/thread.c (revision 739)
@@ -581,7 +581,7 @@
 }
 
-void mt_slabs_free(void *ptr, size_t size) {
+void mt_slabs_free(void *ptr, size_t size, unsigned int id) {
     pthread_mutex_lock(&slabs_lock);
-    do_slabs_free(ptr, size);
+    do_slabs_free(ptr, size, id);
     pthread_mutex_unlock(&slabs_lock);
 }
Index: /trunk/server/slabs.h
===================================================================
--- /trunk/server/slabs.h (revision 738)
+++ /trunk/server/slabs.h (revision 739)
@@ -21,5 +21,5 @@
 
 /** Free previously allocated object */
-void do_slabs_free(void *ptr, size_t size);
+void do_slabs_free(void *ptr, size_t size, unsigned int id);
 
 /** Fill buffer with stats */ /*@null@*/
Index: /trunk/server/memcached.h
===================================================================
--- /trunk/server/memcached.h (revision 738)
+++ /trunk/server/memcached.h (revision 739)
@@ -293,5 +293,5 @@
 void  mt_run_deferred_deletes(void);
 void *mt_slabs_alloc(size_t size, unsigned int id);
-void  mt_slabs_free(void *ptr, size_t size);
+void  mt_slabs_free(void *ptr, size_t size, unsigned int id);
 int   mt_slabs_reassign(unsigned char srcid, unsigned char dstid);
 char *mt_slabs_stats(int *buflen);
@@ -322,5 +322,5 @@
 # define run_deferred_deletes()      mt_run_deferred_deletes()
 # define slabs_alloc(x,y)            mt_slabs_alloc(x,y)
-# define slabs_free(x,y)             mt_slabs_free(x,y)
+# define slabs_free(x,y,z)           mt_slabs_free(x,y,z)
 # define slabs_reassign(x,y)         mt_slabs_reassign(x,y)
 # define slabs_stats(x)              mt_slabs_stats(x)
@@ -355,5 +355,5 @@
 # define run_deferred_deletes()      do_run_deferred_deletes()
 # define slabs_alloc(x,y)            do_slabs_alloc(x,y)
-# define slabs_free(x,y)             do_slabs_free(x,y)
+# define slabs_free(x,y,z)           do_slabs_free(x,y,z)
 # define slabs_reassign(x,y)         do_slabs_reassign(x,y)
 # define slabs_stats(x)              do_slabs_stats(x)
Index: /trunk/server/items.c
===================================================================
--- /trunk/server/items.c (revision 738)
+++ /trunk/server/items.c (revision 739)
@@ -145,4 +145,5 @@
 void item_free(item *it) {
     size_t ntotal = ITEM_ntotal(it);
+    unsigned int clsid;
     assert((it->it_flags & ITEM_LINKED) == 0);
     assert(it != heads[it->slabs_clsid]);
@@ -151,8 +152,9 @@
 
     /* so slab size changer can tell later if item is already free or not */
+    clsid = it->slabs_clsid;
     it->slabs_clsid = 0;
     it->it_flags |= ITEM_SLABBED;
     DEBUG_REFCNT(it, 'F');
-    slabs_free(it, ntotal);
+    slabs_free(it, ntotal, clsid);
 }
 
