[erlang-questions] Is it safe to unlink from gen_fsm on the fly?

Sergey Samokhin prikrutil@REDACTED
Wed Sep 23 19:43:26 CEST 2009


Hello, Jayson!

> If you have the reconnection process always running, do you need to spawn it
> and pass it around?

No, I don't =)

> That said, you might be able to invert the scenario.  What if it was a
> gen_event?  They you could just throw off a synchronous event when you have
> a disconnection, and it could catch it to reconnect.

Which of the previously mentioned processes (gen_server, connector)
are you suggesting to be implemented as a gen_event?

Could you explain the picture with gen_event being used anyway in a
bit more details?

Assuming the connector is implemented as a gen_event, supervision
three should have one of the two following forms (hope, spaces won't
be skipped by ezmlm):

a) [iface] and [connector] are both linked to the supervisor:

             [supervisor]
              |       |
[iface gen_server] [connector gen_event]

b) connector is linked to the iface which in turn is linked to the supervisor:

   [supervisor]
        |
[iface gen_server]
        |
[connector gen_event]

Is any of those the solution you had in mind while writing about gen_event?

P.S. I have one more solution to note that hasn't been touched yet:
there is only one process - gen_server - trying to reconnect every
?TIME ms by handling messages sent using erlang:send_after(?TIME,
self(), reconnect). This way to reconnect can be considered as
"partially" blocking, because the gen_server is still able to react on
incoming message between 'reconnect' events. It's only useful when
connect() is relative fast.

Thanks.

-- 
Sergey Samokhin


More information about the erlang-questions mailing list