また privoxyネタ。スレッドではなく、fork()を使うようにしたわけだけど、そうするとタブブラウザで同時に複数のページにアクセスすると引っ掛かるようになった。
ソースを見てみると、fork()を1回だけして waitpid している。これだと、ひとつのアクセスが終了するまでは次のアクセスを処理しない。2回 forkして子プロセスは exit(0) 孫プロセスが実際の処理というふうに改良。
--- jcc.c~ Tue Mar 18 01:48:59 2003 +++ jcc.c Mon Jul 21 10:54:58 2003 @@ -2368,7 +2368,10 @@ #ifdef FEATURE_TOGGLE int inherited_toggle_state = global_toggle_state; #endif /* def FEATURE_TOGGLE */ - + child_id = fork(); + if (child_id != 0){ + exit(0); + } serve(csp);
一時的に大量のプロセスが発生するけど、 Linux では プロセス生成だけなら Copy on Write などのおかげでコストは全然掛からないし、 privoxy 自体の処理も軽いのでまあ問題なし。
最近のコメント