<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>Hi!</div><div><br></div><div><div>On 13 maj 2011, at 09.05, Sam Bobroff wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div><div><div class="gmail_quote">On 13 May 2011 16:08, Nahuel Greco <span dir="ltr"><<a href="mailto:ngreco@gmail.com" target="_blank">ngreco@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; position: static; z-index: auto; ">Sam, check this thread:<br>
<br>
<a href="http://thread.gmane.org/gmane.comp.lang.erlang.general/47310" target="_blank">http://thread.gmane.org/gmane.comp.lang.erlang.general/47310</a><br>
<br>
Saludos,<br>
<font color="#888888">Nahuel Greco.<br>
</font><div><div></div><div><br></div></div></blockquote>Ah yes that seems to match exactly what I've observed!<div><br></div><div>Thanks for that :-)<br>
<div><br></div><div>I agree with your (and Matthias') comments in that it should be changed in accordance with the patch!</div><div>In my opinion the current system is confusing and therefore dangerous.</div><div><br></div></div></div></div></div></blockquote><div>If you change your example into this:</div><div>-------------</div><div><div>-module(foo).</div><div>-ifdef(BODY).</div><div>-export([start/0, loop/0]).</div><div>start() -></div><div>        register(?MODULE, spawn(?MODULE, loop, [])).</div><div>loop() -></div><div>        io:fwrite("loop version ~p\n", [?V]),</div><div>        receive</div><div>                _ -></div><div>                        F = fun () -> ?V,loop() end,</div><div>                        F()</div><div>        end.</div><div>-endif.</div><div>-------------</div><div><br></div><div>The only difference is that I put a dummy version value inside the fun. This is enough to make the</div><div>fun handle unique (in this case). In one project I used a erlang:now value to (mostly) generate a new function reference.</div><div><br></div></div><blockquote type="cite"><div><div><div class="gmail_quote"><div><div>
</div><div>Hmm... from poking around in the emulator code it looks like the "hash" is made up of three components XOR'ed together:</div><div><br></div><div>* the index</div><div>* the module's name</div>
<div>* a "uniq" value</div><div><br></div><div>Since during code reloading, the module name and index could easily be the same... if the uniq were the same then the emulator would be fooled into thinking it was OK to use the new version of the code... when it was not OK.</div>
<div><br></div></div></div></div></div></blockquote><div>I guess the new_unique (same as module:info) should/could be used some how.</div><div><br></div><div><br></div><blockquote type="cite"><div><div><div class="gmail_quote"><div><div>I couldn't see what system was used to set the uniq value ("old_uniq" in most of the code I saw)... does anyone know what it is?</div><div><br></div><div>Even without knowing the algorithm, if I can control the Fun's index, and I can see it's uniq, I can probably cause a hash collision by setting the index to a specific value.</div>
<div><br></div><div>The reason I ask is that I'm wondering if a hash collision is possible and if that has the potential to crash the emulator.</div><div><br></div><div>Sam.</div><div><br></div></div></div></div>
</div>
_______________________________________________<br>erlang-questions mailing list<br><a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>http://erlang.org/mailman/listinfo/erlang-questions<br></blockquote></div><br><div>
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="font-family: Verdana, Arial, Tahoma; font-size: 12px; "><i>"Have run Make so many times I dunno what's installed anymore"</i></span></div>
</div>
<br></body></html>