以下の内容はhttps://memememomo.hatenablog.com/entry/2013/01/05/124536より取得しました。


Mojoliciousで動的に大きなファイルを配信する

こちらの記事を参考にさせていただきました。
http://perlcode.hateblo.jp/entry/20120321/1332488265

プロセスがずっとreadしつづけている?

ダウンロードが完了してうまくいっているように見えたのですが、
プロセスが残り続ける症状が出ました。

「strace -r -p {プロセス番号}」で、該当のプロセスを調べてみると、
ずっとreadし続けていました。
どうやらコールバックのループがうまく終了できていない様子。

コードを確認してみると以下の部分に原因がありそうでした。

    my $length = sysread($fh, my $buffer, $size);
    unless (defined $length) {
      close $fh;
      undef $cb;
      return;
    }


sysreadは読み込み失敗するとundefを返すのですが、
読み込むデータがない場合は0を返します。
該当のコードは終了処理に入っていませんでした。


以下のように修正しました。修正の仕方にちょっと自信がありませんが...

    my $length = sysread($fh, my $buffer, $size);
    unless ($length) {
      $c->write_chunk($buffer);
      close $fh;
      undef $cb;
      return;
    }



以上の内容はhttps://memememomo.hatenablog.com/entry/2013/01/05/124536より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14