# HG changeset patch # User Yoshiki Yazawa # Date 1271598528 -32400 # Node ID 1c4558d1a449c6353f518c23c892ca5e6f5f4314 # Parent 4dee3368df638b0806bf01dc3e81b98fe9d926b8# Parent e379552d084c11024fa2187cca1ef3685d10d4b3 merged with upstream diff -r 4dee3368df63 -r 1c4558d1a449 Reservation.class.php --- a/Reservation.class.php Fri Apr 16 19:08:58 2010 +0900 +++ b/Reservation.class.php Sun Apr 18 22:48:48 2010 +0900 @@ -238,7 +238,10 @@ $filename = mb_str_replace("%DURATION%","".$duration, $filename ); // あると面倒くさそうな文字を全部_に - $filename = preg_replace("/[ \.\/\*:<>\?\\|()\'\"&]/u","_", trim($filename) ); +// $filename = preg_replace("/[ \.\/\*:<>\?\\|()\'\"&]/u","_", trim($filename) ); + + // preg_replaceがUTF-8に対応できない環境があるようなのでmb_ereg_replaceに戻す + $filename = mb_ereg_replace("[ \./\*:<>\?\\|()\'\"&]","_", trim($filename) ); // 文字コード変換 if( defined("FILESYSTEM_ENCODING") ) { diff -r 4dee3368df63 -r 1c4558d1a449 recorder.php --- a/recorder.php Fri Apr 16 19:08:58 2010 +0900 +++ b/recorder.php Sun Apr 18 22:48:48 2010 +0900 @@ -56,14 +56,11 @@ return false; } -// 指定したプロセスハンドルが生成した子プロセスのpidリストを返す +// 指定したプロセスIDが生成した子プロセスのpidリストを返す // こういうやり方しかないのか? // -function epgrec_childproc( $p ) +function epgrec_childproc( $ppid ) { - $st = proc_get_status( $p ); - $ppid = $st['pid']; - // ps を実行する $d = array( 0 => array( 'file','/dev/null','r' ), @@ -88,6 +85,12 @@ fclose( $pipes[1] ); proc_close( $ps ); + foreach( $cpids as $p ) { + $ccpids = epgrec_childproc( $p ); + foreach( $ccpids as $ccpid ) { + array_push( $cpids, $ccpid ); + } + } return $cpids; } @@ -100,8 +103,8 @@ system( "ps ax >>".$logfile ); system( "echo ------- >>".$logfile ); } - - $cpids = epgrec_childproc( $p ); + $status = proc_get_status( $p ); + $cpids = epgrec_childproc( $status['pid'] ); if( DEBUG ) { global $logfile; @@ -112,12 +115,13 @@ system( "echo ------- >>".$logfile ); } + // 親から止める @proc_terminate( $p ); - sleep(1); + usleep(500*1000); @proc_terminate( $p ); // 2度送る foreach( $cpids as $cpid ) { - $ret = posix_kill( $cpid, SIGTERM ); // sigterm + $ret = posix_kill( $cpid, SIGTERM ); // sigterm usleep(100*1000); if( ! $ret ) posix_kill( $cpid, SIGKILL ); // sigkill } @@ -128,10 +132,12 @@ system( "echo ------- >>".$logfile ); } + /* プロセスがしばらく居残る場合がある foreach( $cpids as $cpid ) { $ret = posix_kill( $cpid, SIGTERM ); // sigterm - if( $ret ) return false; // 恐らくプロセスが存在するのでエラー + if( $ret ) return false; // 恐らくプロセスが存在するのでエラー } + */ return true; // 保証できない } @@ -226,7 +232,6 @@ if( time() < $endtime ) { $rrec->endtime = toDatetime( time() ); } - // 完了フラグを立てておく $rrec->complete = '1'; diff -r 4dee3368df63 -r 1c4558d1a449 storeProgram.inc.php --- a/storeProgram.inc.php Fri Apr 16 19:08:58 2010 +0900 +++ b/storeProgram.inc.php Sun Apr 18 22:48:48 2010 +0900 @@ -191,7 +191,8 @@ try { $reserve = new DBRecord( RESERVE_TBL, "program_id", $rec->id ); - if( $reserve->dirty == 0 ) { + // dirtyが立っておらず現在より後の録画予約であるなら + if( ($reserve->dirty == 0) && (toTimestamp($reserve->starttime) > time()) ) { $reserve->title = $title; $reserve->description = $desc; reclog( "getepg:: 予約ID".$reserve->id."のEPG情報が更新された" );