Просмотр исходного кода

Fix bug in remove_pid not to corrupt Pool state.

Think-o introduced in refactoring.

Needs to add some tests around crashes of unused members.
Seth Falcon 14 лет назад
Родитель
Сommit
dcef3ae491
1 измененных файлов с 3 добавлено и 1 удалено
  1. 3 1
      src/pooler.erl

+ 3 - 1
src/pooler.erl

@@ -349,7 +349,9 @@ remove_pid(Pid, State) ->
         {ok, {PoolName, free, _Time}} ->
             % remove an unused member
             Pool = dict:fetch(PoolName, Pools),
-            Pool1 = lists:delete(Pid, Pool#pool.free_pids),
+            FreePids = lists:delete(Pid, Pool#pool.free_pids),
+            NumFree = Pool#pool.free_count - 1,
+            Pool1 = Pool#pool{free_pids = FreePids, free_count = NumFree},
             exit(Pid, kill),
             State#state{pools = dict:store(PoolName, Pool1, Pools),
                         all_members = dict:erase(Pid, AllMembers)};