[erlang-questions] Possible bug after ets:insert exception

Gleb Peregud <>
Tue Aug 19 16:09:05 CEST 2008


On Tue, Aug 19, 2008 at 3:33 PM, Colm Dougan <> wrote:
> Hi,
>
> I'm running 12B-3.  Below is a console session.  Everything worked as
> expected until "4>" where I unintentionally provided an atom in my
> insert and I get a bad arg.  Again that was expected.  What I didn't
> expect, however, was that from then on the ets table seemed to be in a
> bad state and couldn't be queried.  I realise this is an edge case.
> Is this a bug?
>
> Colm
>
> Eshell V5.6.3  (abort with ^G)
> 1> ets:new(testtable,[set,named_table,private]).
> testtable
> 2> ets:insert(testtable, [{foo, 10}]).
> true
> 3> ets:tab2list(testtable).
> [{foo,10}]
> 4> ets:insert(testtable, bar).
> ** exception error: bad argument
>     in function  ets:insert/2
>        called as ets:insert(testtable,bar)
> 5> ets:tab2list(testtable).
> ** exception error: bad argument
>     in function  ets:match_object/2
>        called as ets:match_object(testtable,'_')
>     in call from ets:tab2list/1
> _______________________________________________
> erlang-questions mailing list
> 
> http://www.erlang.org/mailman/listinfo/erlang-questions
>

Hello,

The reason is slightly different. Take a look:

Erlang (BEAM) emulator version 5.6.2 [source] [async-threads:0] [hipe]
[kernel-poll:false]

Eshell V5.6.2  (abort with ^G)
1>  ets:new(testtable,[set,named_table,private]).
testtable
2> ets:i().
 id              name              type  size   mem      owner
 ----------------------------------------------------------------------------
 11              code              set   256    10161    code_server
 ...
 inet_hosts      inet_hosts        set   0      279      inet_db
 testtable       testtable         set   0      279      <0.30.0>
ok
3> self().
<0.30.0>
4> true = false.
** exception error: no match of right hand side value false
5> self().
<0.35.0>
6> ets:i().
 id              name              type  size   mem      owner
 ----------------------------------------------------------------------------
 11              code              set   257    10265    code_server
 ...
 inet_hosts      inet_hosts        set   0      279      inet_db
ok
7>

When there is an exception in shell, shell process crashes (take a
look at result of self/0). Because of that 'testtable' disappears from
the system. In "man ets" you can read the following: "When the process
terminates, the table is automatically destroyed."

BR
-- 
Gleb Peregud
http://gleber.pl/

Every minute is to be grasped.
Time waits for nobody.
-- Inscription on a Zen Gong



More information about the erlang-questions mailing list