3030-export ([
3131 start_link /0 ,
3232 create_ets_table /1 , create_ets_table /2 ,
33- delete_ets_table /1
33+ delete_ets_table /1 ,
34+ change_owner /2
3435 ]).
3536
3637% % gen_fsm state functions
5657-spec create_ets_table (ets_concurrency ()) -> ets :tid ().
5758-spec create_ets_table (atom (), ets_concurrency ()) -> ets :tid ().
5859-spec delete_ets_table (atom () | ets :tid ()) -> ok .
60+ -spec change_owner (atom () | ets :tid (), pid ()) -> ok .
5961
6062start_link () ->
6163 gen_fsm :start_link ({local , ? SERVER }, ? MODULE , {}, []).
@@ -72,6 +74,9 @@ create_ets_table(Name, Concurrency_Type)
7274delete_ets_table (Table_Id_Or_Name ) ->
7375 gen_fsm :sync_send_event (? SERVER , {delete_ets_table , Table_Id_Or_Name }).
7476
77+ change_owner (Table_Id_Or_Name , New_Owner ) ->
78+ gen_fsm :sync_send_event (? SERVER , {change_owner , Table_Id_Or_Name , New_Owner }).
79+
7580make_options (none ) -> make_base_options ([]);
7681make_options (read_only ) -> make_base_options ([{read_concurrency , true }]);
7782make_options (write_only ) -> make_base_options ([{write_concurrency , true }]);
@@ -110,9 +115,13 @@ code_change (_OldVsn, State_Name, #eef_state{} = State, _Extra) -> {ok, State_N
110115 (delete_ets_cmd (), from (), internal_state ()) -> ok ;
111116 (stop_cmd (), from (), internal_state ()) -> {stop , normal }.
112117
113- 'READY' ({create_ets_table , Name , Options }, _From , # eef_state {} = State ) when is_atom (Name ), is_list (Options ) -> {reply , ets :new (Name , Options ), 'READY' , State };
114- 'READY' ({create_ets_table , Options }, _From , # eef_state {} = State ) when is_list (Options ) -> {reply , ets :new (noname , Options ), 'READY' , State };
115- 'READY' ({delete_ets_table , Table }, _From , # eef_state {} = State ) when is_atom (Table ); is_integer (Table ) -> {reply , ets :delete (Table ), 'READY' , State };
118+ -define (READY (__Cmd ), 'READY' (__Cmd , _From , # eef_state {} = State )).
119+ -define (REPLY (__Reply ), {reply , __Reply , 'READY' , State }).
120+
121+ ? READY ({create_ets_table , Options }) when is_list (Options ) -> ? REPLY (ets :new (noname , Options ));
122+ ? READY ({create_ets_table , Name , Options }) when is_list (Options ), is_atom (Name ) -> ? REPLY (ets :new (Name , Options ));
123+ ? READY ({delete_ets_table , Table }) when is_atom (Table ); is_integer (Table ) -> ? REPLY (ets :delete (Table ));
124+ ? READY ({change_owner , Table , Pid }) when is_atom (Table ); is_integer (Table ) -> ? REPLY (ets :give_away (Table , Pid , {}));
116125
117126% % Stop the ets owner FSM process.
118127'READY' (stop , _From , # eef_state {}) -> {stop , normal }.
0 commit comments