ets weirdness when using -run

Raimo Niskanen raimo@REDACTED
Wed Jun 19 10:46:06 CEST 2002


Hi Chris.

The -run argument spawns a new process that calls eg:start([Key]). When
that function returns, the process dies, and with it the ets table. Try
typing process_info(pid(0,1,0)) in the shell after your test has failed,
to verify that the table owner has died. 

When you run it from the erlang shell, the shell process becomes the
owner, and stays alive after eg:start("Key").

/ Raimo Niskanen, Erlang/OTP, Ericsson AB



Chris Pressey wrote:
> 
> I have a program that uses a public, named ets table like so:
> 
> -module(eg).
> -export([start/1, new/1]).
> 
> start(Key) ->
>   ets:new(my_ets, [public, named_table]),
>   io:fwrite("~p~n", [ets:info(my_ets)]),
>   start_new(lists:flatten(Key)).
> 
> start_new(Key) ->
>   spawn(?MODULE, new, [Key]).
> 
> new(Key) ->
>   io:fwrite("~p~n", [ets:info(my_ets)]),
>   case ets:lookup(my_ets, Key) of
>     [_] ->
>        io:fwrite("Already in database~n");
>     _ ->
>        io:fwrite("Not yet in database~n")
>   end.
> 
> Here is what happens when I run it from the Erlang shell:
> 
> kallisti# erl
> Erlang (BEAM) emulator version 5.1.1 [source]
> 
> Eshell V5.1.1  (abort with ^G)
> 1> eg:start("Key").
> {{memory,276},
>  {owner,<0.23.0>},
>  {name,my_ets},
>  {size,0},
>  {node,nonode@REDACTED},
>  {named_table,true},
>  {type,set},
>  {keypos,1},
>  {protection,public}}
> {{memory,276},
>  {owner,<0.23.0>},
>  {name,my_ets},
>  {size,0},
>  {node,nonode@REDACTED},
>  {named_table,true},
>  {type,set},
>  {keypos,1},
>  {protection,public}}
> <0.30.0>
> Not yet in database
> 2>
> 
> But here is what happens when I run it from the command line:
> 
> kallisti# erl -run eg start Key
> Erlang (BEAM) emulator version 5.1.1 [source]
> 
> Eshell V5.1.1  (abort with ^G)
> 1> {{memory,276},
>  {owner,<0.1.0>},
>  {name,my_ets},
>  {size,0},
>  {node,nonode@REDACTED},
>  {named_table,true},
>  {type,set},
>  {keypos,1},
>  {protection,public}}
> undefined
> 
> =ERROR REPORT==== 18-Jun-2002::16:22:00 ===
> Error in process <0.30.0> with exit value:
> {badarg,[{ets,lookup,[my_ets,"Key"]},{eg,new,1}]}
> 
> Any thoughts on what I might be doing wrong to make my_ets just vanish
> like that?
> 
> -Chris



More information about the erlang-questions mailing list