[erlang-questions] io:format, gen_fsm, eunit

nic nic@REDACTED
Wed Sep 5 07:19:08 CEST 2007


Hi all

I'm yet another of the Erlang total newbies, so please be patient with what is probably a 
really dumb question.

I've created a very basic gen_fsm-based state machine which works fine in the shell. I 
intend to add states and actions to it as my application evolves. At the moment, it prints 
a message (using io:format) at each state transition. I'm using eunit to make sure I don't 
break anything as I add to the FSM (and partly for the experience of using eunit).

My first test creates an FSM, sends a single event (which causes a transition message to 
be printed) then stops the FSM. eunit says the test works OK, but I get an error message 
printed which _looks_ really ugly:

=ERROR REPORT==== 5-Sep-2007::16:54:37 ===
** State machine dll_1 terminating
** Last event in was init
** When State == in_reset
**      Data  == {state,0,undefined,undefined}
** Reason for termination =
** {ebadf,[{io,format,
                [<0.151.0>,
                 "in_reset Event: ~p, State: ~p~n",
                 [init,{state,0,undefined,undefined}]]},
            {m27_dll_fsm,in_reset,2},
            {gen_fsm,handle_msg,7},
            {proc_lib,init_p,5}]}
   Test successful.
ok


I think I can see what's going on: the io:format's file descriptor has disappeared (been 
closed) before the write has finished, presumably because the gen_fsm process that opened 
it has been stopped.

The test is successful, so I could just live with the ugly error message, but I can 
imagine that if there were a few of these it would be really easy to miss some useful 
error reports amongst all the noise. It's a bit like ignoring compiler warnings: I've 
always found it pays to make things compile clean.

So (finally) is it something to do with the way I'm setting up the test, or is there a 
cunning (or obvious!) way around it, or should I just live with it, or what?

Cheers

Nic C-L



More information about the erlang-questions mailing list