changeset 170:1c4558d1a449

merged with upstream
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Sun, 18 Apr 2010 22:48:48 +0900
parents 4dee3368df63 (current diff) e379552d084c (diff)
children 2a944f0c15c5
files Reservation.class.php
diffstat 3 files changed, 22 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- 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") ) {
--- 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';
 	
--- 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情報が更新された" );