          ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
                        "subrequests cycle while processing \"%V\"", uri);
          r->main->subrequests = 1;
-@@ -2489,6 +2492,8 @@ ngx_http_subrequest(ngx_http_request_t *r,
+@@ -2491,6 +2494,8 @@ ngx_http_subrequest(ngx_http_request_t *r,
  
      *psr = sr;
  

     echo "checking for OS"
diff --git a/src/dtrace/nginx.stp b/src/dtrace/nginx.stp
new file mode 100644
index 0000000..648a962
--- /dev/null
+++ b/src/dtrace/nginx.stp
@@ -0,0 +1,46 @@
+/* tapset for nginx */
+
+/* retrieve the request uri string from the ngx_http_request_t pointer */

         if (ngx_http_post_request(pr, NULL) != NGX_OK) {
             r->main->count++;
             ngx_http_terminate_request(r, 0);
diff --git a/src/http/ngx_http_request_body.c b/src/http/ngx_http_request_body.c
index f0e671a..37ec5d2 100644
--- a/src/http/ngx_http_request_body.c
+++ b/src/http/ngx_http_request_body.c
@@ -8,6 +8,7 @@
 #include <ngx_config.h>
 #include <ngx_core.h>
 #include <ngx_http.h>
+#include <ngx_http_probe.h>
 
 
 static void ngx_http_read_client_request_body_handler(ngx_http_request_t *r);
@@ -40,11 +41,15 @@ ngx_http_read_client_request_body(ngx_http_request_t *r,
     r->main->count++;
 
     if (r->request_body || r->discard_body || r->content_length_n == 0) {
+        ngx_http_probe_read_body_abort(r,
+                                       r->request_body ? "body exists"
+                                                       : "body discarded");
         post_handler(r);
         return NGX_OK;
     }
 
     if (ngx_http_test_expect(r) != NGX_OK) {
+        ngx_http_probe_read_body_abort(r, "test expect failed");
         return NGX_HTTP_INTERNAL_SERVER_ERROR;
     }
 
@@ -56,6 +61,7 @@ ngx_http_read_client_request_body(ngx_http_request_t *r,
     r->request_body = rb;
 
     if (r->headers_in.content_length_n < 0) {
+        ngx_http_probe_read_body_abort(r, "no content length");
         post_handler(r);
         return NGX_OK;
     }
@@ -89,10 +95,13 @@ ngx_http_read_client_request_body(ngx_http_request_t *r,
                                      tf->persistent, tf->clean, tf->access)
                 != NGX_OK)
             {
+                ngx_http_probe_read_body_abort(r, "create temp file failed");
                 return NGX_HTTP_INTERNAL_SERVER_ERROR;
             }
         }
 
+        ngx_http_probe_read_body_done(r);
+
         post_handler(r);
 
         return NGX_OK;
@@ -148,10 +157,13 @@ ngx_http_read_client_request_body(ngx_http_request_t *r,
 
             if (r->request_body_in_file_only) {
                 if (ngx_http_write_request_body(r, rb->bufs) != NGX_OK) {
+                    ngx_http_probe_read_body_abort(r, "write temp file failed");
                     return NGX_HTTP_INTERNAL_SERVER_ERROR;
                 }
             }
 
+            ngx_http_probe_read_body_done(r);
+
             post_handler(r);
 
             return NGX_OK;
@@ -245,6 +257,7 @@ ngx_http_read_client_request_body_handler(ngx_http_request_t *r)
     ngx_int_t  rc;
 
     if (r->connection->read->timedout) {
+        ngx_http_probe_read_body_abort(r, "timed out");
         r->connection->timedout = 1;
         ngx_http_finalize_request(r, NGX_HTTP_REQUEST_TIME_OUT);
         return;
@@ -279,6 +292,7 @@ ngx_http_do_read_client_request_body(ngx_http_request_t *r)
             if (rb->buf->last == rb->buf->end) {
 
                 if (ngx_http_write_request_body(r, rb->to_write) != NGX_OK) {
+                    ngx_http_probe_read_body_abort(r, "write temp file failed");
                     return NGX_HTTP_INTERNAL_SERVER_ERROR;
                 }
 
@@ -302,6 +316,9 @@ ngx_http_do_read_client_request_body(ngx_http_request_t *r)
             }
 
             if (n == 0) {
+
+                ngx_http_probe_read_body_abort(r, "connection closed");
+
                 ngx_log_error(NGX_LOG_INFO, c->log, 0,
                               "client prematurely closed connection");
             }
@@ -352,6 +369,7 @@ ngx_http_do_read_client_request_body(ngx_http_request_t *r)
         /* save the last part */
 
         if (ngx_http_write_request_body(r, rb->to_write) != NGX_OK) {
+            ngx_http_probe_read_body_abort(r, "write temp file failed");
             return NGX_HTTP_INTERNAL_SERVER_ERROR;
         }
 
@@ -381,6 +399,8 @@ ngx_http_do_read_client_request_body(ngx_http_request_t *r)
 
     r->read_event_handler = ngx_http_block_reading;
 
+    ngx_http_probe_read_body_done(r);
+
     rb->post_handler(r);
 
     return NGX_OK;
