2012-02-27 22 views
0

私は、動作gen_serverを持つerlangモジュールを持っています。erlangタイマーがタイムアウトになる

は今、私が持っている:

init(_Args) -> 
    erlang:send_after(?PROCESS_STATE_INTERVAL,self(),processState), 
    {ok, []}. 

handle_info(processState, _State)-> 
    {ok, NewState} = gen_server:call(self(), {updateLvls}), %works fine, tested 
    timer:send_after(?PROCESS_STATE_INTERVAL,self(),processState), 
    {noreply, NewState}. 

は私が** exception error: {timeout,{gen_server,call,[<0.329.0>,{updateLvls}]}}

私が何か間違ったことをやっている私が手に、数秒後に{ok, Test}=gen_server:start_link({local,challenge_manager},challenge_manager,[],[]).ようなもので、それを起動すると?

答えて

10

自分自身からgen_serverを呼び出すことはできません。それはデッドロック(あなたが見ているものです)になります。サーバープロセスはあなたの最初のリクエストを処理しています(あなたがまだ戻っていないので)。そして、2番目のリクエスト(最初のリクエストの処理から作られたもの)を待ち行列に入れます。いずれか、この問題を解決handle_callhandle_info用途の両方のライブラリ関数を作成するか、非同期応答(あなたがhandle_call関数から{noreply, ...}を返す場合)を行うようになるreply/2機能を見てみることを

関連する問題