<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; color: rgb(0, 0, 0); font-size: 14px; font-family: Calibri, sans-serif;">
<div>
<div>
<div><br>
</div>
<div>Thanks Siri — that’s exactly the kind of subtlety I was looking to find out about!</div>
<div>Sounds like changing this is not a good idea; so, let’s just stick with the current spec/behavior.</div>
<div><br>
</div>
<div>Thanks,</div>
<div>-fl.</div>
<div><br>
</div>
<div>
<div id="MAC_OUTLOOK_SIGNATURE"></div>
</div>
</div>
</div>
<div><br>
</div>
<span id="OLK_SRC_BODY_SECTION">
<div style="font-family:Calibri; font-size:12pt; text-align:left; color:black; BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BORDER-TOP: #b5c4df 1pt solid; BORDER-RIGHT: medium none; PADDING-TOP: 3pt">
<span style="font-weight:bold">From: </span>Siri Hansen<br>
<span style="font-weight:bold">Date: </span>Friday, January 16, 2015 at 3:07 AM<br>
<span style="font-weight:bold">To: </span>Florian Waas<br>
<span style="font-weight:bold">Cc: </span>"<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a>"<br>
<span style="font-weight:bold">Subject: </span>Re: [erlang-questions] Differences in code_change callback between gen_server and gen_fsm<br>
</div>
<div><br>
</div>
<blockquote id="MAC_OUTLOOK_ATTRIBUTION_BLOCKQUOTE" style="BORDER-LEFT: #b5c4df 5 solid; PADDING:0 0 0 5; MARGIN:0 0 0 5;">
<div>
<div>
<div dir="ltr">Hi Florian!
<div><br>
</div>
<div>The way gen_fsm (and gen_event) is specified is actually the original - i.e. the code_change should always succeed. The function spec in gen_server was updated in OTP R15B to allow an error return since this was required (and had always been used) by supervisor
 (<a href="https://github.com/erlang/otp/commit/038b9dd3a1f9bdd86cbb83bf3484ab1529d4fca2">https://github.com/erlang/otp/commit/038b9dd3a1f9bdd86cbb83bf3484ab1529d4fca2</a>). The release_handler was updated at the same time (so even if the supervisor did use
 it before, the result would probably not have been too nice if it actually failed).</div>
<div><br>
</div>
<div>Anyway... I guess there would be no harm in updating the spec in gen_fsm to reflect that an error return is allowed (even if it is not a good idea - it will fail the complete upgrade and roll back to the old release. A fact which would have to be stated
 in the reference manual.) I could write at ticket for this, but the chance that it would be prioritized within reasonable time is extremely small. A contribution would help, of course...<br>
</div>
<div><br>
</div>
<div>When it comes to gen_event, the change would be a bit more complicated. Errors are not handled at all in the code as it is now.</div>
<div><br>
</div>
<div>Regards</div>
<div>/siri</div>
<div><br>
</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">2015-01-06 19:41 GMT+01:00 Florian Waas <span dir="ltr">
<<a href="mailto:flw@datometry.com" target="_blank">flw@datometry.com</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
In gen_server the callback for code_change is spec’d as<br>
<br>
  Module:code_change(OldVsn, State, Extra) -> {ok, NewState} | {error,<br>
Reason}<br>
<br>
in gen_fsm as<br>
<br>
  Module:code_change(OldVsn, StateName, StateData, Extra) -> {ok,<br>
NextStateName, NewStateData}<br>
<br>
i.e., upgrades on FSM’s had better succeed? The underlying implementation<br>
in sys.erl is the same for both and allows for an error case.<br>
Am I missing some subtlety here?<br>
<br>
Thanks,<br>
-fl.<br>
<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote>
</div>
<br>
</div>
</div>
</div>
</blockquote>
</span>
</body>
</html>