Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 25 May 2015 02:30:54 +0000 (UTC)
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org
Subject:   svn commit: r283512 - vendor-sys/illumos/dist/uts/common/dtrace
Message-ID:  <201505250230.t4P2Usn2006127@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: markj
Date: Mon May 25 02:30:54 2015
New Revision: 283512
URL: https://svnweb.freebsd.org/changeset/base/283512

Log:
  3599 dtrace_dynvar tail calls can blow stack
  Reviewed by: Adam Leventhal <ahl@delphix.com>
  Reviewed by: Gordon Ross <gordon.ross@nexenta.com>
  Approved by: Richard Lowe <richlowe@richlowe.net>
  Author: Bryan Cantrill <bryan@joyent.com>
  
  illumos/illumos-gate@d47448f09aae3aa1a87fc450a0c44638e7ce7b51

Modified:
  vendor-sys/illumos/dist/uts/common/dtrace/dtrace.c

Modified: vendor-sys/illumos/dist/uts/common/dtrace/dtrace.c
==============================================================================
--- vendor-sys/illumos/dist/uts/common/dtrace/dtrace.c	Mon May 25 01:31:39 2015	(r283511)
+++ vendor-sys/illumos/dist/uts/common/dtrace/dtrace.c	Mon May 25 02:30:54 2015	(r283512)
@@ -21,7 +21,7 @@
 
 /*
  * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2013, Joyent, Inc. All rights reserved.
+ * Copyright (c) 2015, Joyent, Inc. All rights reserved.
  * Copyright (c) 2012, 2014 by Delphix. All rights reserved.
  */
 
@@ -2037,7 +2037,7 @@ retry:
 	 * this hash chain, or another CPU is deleting an element from this
 	 * hash chain.  The simplest way to deal with both of these cases
 	 * (though not necessarily the most efficient) is to free our
-	 * allocated block and tail-call ourselves.  Note that the free is
+	 * allocated block and re-attempt it all.  Note that the free is
 	 * to the dirty list and _not_ to the free list.  This is to prevent
 	 * races with allocators, above.
 	 */
@@ -2050,7 +2050,7 @@ retry:
 		dvar->dtdv_next = free;
 	} while (dtrace_casptr(&dcpu->dtdsc_dirty, free, dvar) != free);
 
-	return (dtrace_dynvar(dstate, nkeys, key, dsize, op, mstate, vstate));
+	goto top;
 }
 
 /*ARGSUSED*/



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201505250230.t4P2Usn2006127>