diff --git a/include/grpc/support/tls.h b/include/grpc/support/tls.h
index 7a7143c6d19c7134f35f9324bf776d9e40b09da6..156280e47da5a6b7aaa5648dfbf6baa6e5557617 100644
--- a/include/grpc/support/tls.h
+++ b/include/grpc/support/tls.h
@@ -54,7 +54,7 @@
    Destroying a thread local:
      gpr_tls_destroy(&foo);
 
-   Setting a thread local:
+   Setting a thread local (returns new_value):
      gpr_tls_set(&foo, new_value);
 
    Accessing a thread local:
diff --git a/include/grpc/support/tls_pthread.h b/include/grpc/support/tls_pthread.h
index 249c4d1cab673cc549022c00d345d0f15bbfc34c..07eb12e5bf86d6a31ac0f9487588b8f0df8ae111 100644
--- a/include/grpc/support/tls_pthread.h
+++ b/include/grpc/support/tls_pthread.h
@@ -47,7 +47,7 @@ struct gpr_pthread_thread_local {
 #define gpr_tls_init(tls) GPR_ASSERT(0 == pthread_key_create(&(tls)->key, NULL))
 #define gpr_tls_destroy(tls) pthread_key_delete((tls)->key)
 #define gpr_tls_set(tls, new_value) \
-    GPR_ASSERT(pthread_setspecific((tls)->key, (void*)(new_value)) == 0)
+    (GPR_ASSERT(pthread_setspecific((tls)->key, (void*)(new_value)) == 0), (new_value))
 #define gpr_tls_get(tls) ((gpr_intptr)pthread_getspecific((tls)->key))
 
 #endif