<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>On Oct 30, 2010, at 9:08 PM, John Rose wrote:</div><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>On Oct 29, 2010, at 4:09 AM, Christian Thalinger wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>On Oct 28, 2010, at 8:40 PM, John Rose wrote:<br><blockquote type="cite">6984311: JSR 292 needs optional bootstrap method parameters<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><a href="http://cr.openjdk.java.net/~jrose/6984311/webrev.02/">http://cr.openjdk.java.net/~jrose/6984311/webrev.02/</a><br></blockquote><font class="Apple-style-span" color="#006312"><br></font>src/share/vm/oops/constantPoolOop.cpp:<br>576 &nbsp;&nbsp;&nbsp;&nbsp;// Benign race condition: &nbsp;f1 may already be filled in while we were trying to lock.<br>I guess we don't care here because the exception to be thrown is expected to be the same for different threads, right?<br></div></blockquote><div><br></div><div>Yes. &nbsp;I added more comments:</div><div><br></div><div><div><div>&nbsp;+ &nbsp; &nbsp;// Benign race condition: &nbsp;f1 may already be filled in while we were trying to lock.</div><div>++ &nbsp; &nbsp;// The important thing here is that all threads pick up the same result.</div><div>++ &nbsp; &nbsp;// It doesn't matter which racing thread wins, as long as only one</div><div>++ &nbsp; &nbsp;// result is used by all threads, and all future queries.</div><div>++ &nbsp; &nbsp;// That result may be either a resolved constant or a failure exception.</div><div><br></div></div><div>This matches what is in the javadoc (for the java.dyn package-info):</div><div><div>&nbsp;* Every use of this constant pool entry must lead to the same outcome.</div><div>&nbsp;* If the resolution of the names in the method handle constant causes an exception to occur,</div><div>&nbsp;* this exception must be recorded by the JVM, and re-thrown on every subsequent attempt</div><div>&nbsp;* to use this particular constant.</div><div><br></div></div></div><blockquote type="cite"><div>1613 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bytes::put_Java_u2((address) (bytes+5), argc);<br>1614 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int arg_i = 0; arg_i &lt; argc; arg_i++) {<br>1615 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int arg = invoke_dynamic_argument_index_at(idx, arg_i);<br>1616 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bytes::put_Java_u2((address) (bytes+5+2*arg_i), arg);<br>1617 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>Isn't argc here overwritten with the first arg?<br></div></blockquote><div><br></div>Right! &nbsp;Changed 5 to 7 on line 1616. &nbsp;Thanks for spotting that.<br><div><br></div><blockquote type="cite"><div>src/share/vm/utilities/constantTag.cpp:<br><br>Only the copyright year is changed.<br></div></blockquote><div><br></div>Fixed.<br><div><br></div><blockquote type="cite"><div>Otherwise looks good.<br></div></blockquote></div><br><div>Thanks. &nbsp;I am updating the webrev:</div><div>&nbsp;&nbsp;<a href="http://cr.openjdk.java.net/~jrose/6984311/webrev.03/">http://cr.openjdk.java.net/~jrose/6984311/webrev.03/</a></div></div></blockquote><div><br></div>Looks good. &nbsp;-- Christian</div></body></html>