[Suzaku:00485] Re: suzaku uClinux apacheの質問(不可解な現象)

kyosuke yoshizu email@hidden
2006年 3月 20日 (月) 18:18:16 JST


yoshizuです

いろいろ調べるためにファイルへのトレースを試みたところ
このトレースファイルが大きくなるにつれ成功する確率が
増えてきました

そこでもしかしたら何か変化するのではと思い thttpd.cの
handle_read()に以下のような100msのSleepを入れて見ました

するとどうでしょう
何回試してもPOSTが成功するのです
ちゃんと標準入力へPOSTデータが渡ります

しかしこのパッチは何の裏づけもないパッチで
理由がわかっていません

予測される原因はなんでしょうか?

もし正式な対処方法があれば一番いいのですが.................









static void
handle_read( connecttab* c, struct timeval* tvP )
    {

        FILE *fp;
    int sz;
    ClientData client_data;


    /* Is there room in our buffer to read more bytes? */
    if ( c->hc.read_idx >= sizeof(c->hc.read_buf) )
        {
        httpd_send_err( &c->hc, 400, httpd_err400title,
httpd_err400form, "" );
        clear_connection( c, tvP );
        return;
        }


        usleep (100000);  ★★★★★★ここにsleepをいれた

      fp=fopen("/var/tmp/http_read_log","a");

        if(fp !=NULL){
                fprintf(fp,"handle_read1:%s\n",c->hc.read_buf);
        }
        fclose(fp);





>> このときIEからのPOSTに対してsuzaku CGIがデータを受信できていないよう
な
>> 障害に悩んでいます
>>
>> Windows CEでなく普通のWindows XPのIEからは問題なく動作します
>>
>> パケットアナライザーでLANのパケットを見たのですが問題が
>> なさそうです
>>
>>  uClinuxのApacheにおいてWindows CE/IEからのPOSTを受けれないという
>> ような規格があるようなことはありますでしょうか?
>
>thttpdで作業していると思うのですが、uClinuxの場合問題が一つあります。
>
>uClinuxでは fork()ではなく vfork()を使うのですが、vfork()の場合、子が終
了
>するまで親は動けません。大きなデータをPOSTで処理する場合、これが
>問題になります。
>
>thttpdの libhttpd.cの中で pipe()処理している個所を一時ファイルにしてあ
げると
>大きなデータでも処理できるようになります。
>
>でも、XPのIEでは問題無いのであれば、関係無いかな?
>--
>         yashi
>






suzaku メーリングリストの案内