recptx.plが動作するんだけどの件

FreeBSD portsのptx-kmodに付属しているrecptx.plをfbsdpt3で用いると、sysctlの部分でPermission deniedになるようです。開いているデバイスにsysctlをかけないように、id:f99aqLink 氏はsysctlの位置を変えて回避したようです。

ただこれではsysctl中はデバイスがフリーになっているので、その間に別のプロセスがデバイスを開いちゃう時間が増大し、スレッドセーフ的には気持ち悪さ++らしいです。

一応こんな感じにロックファイルを使うと完璧じゃないけど気持ち悪さの上昇が抑えられるみたいです。/tmp/.recptx.lockをあらかじめ用意しておくといいらしいです。ついでにマルチカード対応もおまけしとくよって。

--- /usr/ports/multimedia/ptx-kmod/work/ptx-20111212/tools/recptx.pl    2011-12-14 04:26:37.000000000 +0900
+++ /usr/local/bin/recptx.pl    2014-09-29 13:37:17.000000000 +0900
@@ -252,39 +252,46 @@
 #
 # select device
 #
-#  TODO: multicard (/dev/ptx1, /dev/ptx2, ...)
-#
-open($t, "<", "/dev/ptx0.${tuner}0");
-if ($t) {
-    $dev = "/dev/ptx0.${tuner}0";
-    $mib = "dev.ptx.0.${tuner}0";
-} else {
-    open($t, "<", "/dev/ptx0.${tuner}1");
-    if ($t) {
-       $dev = "/dev/ptx0.${tuner}1";
-       $mib = "dev.ptx.0.${tuner}1";
-    } else {
-       die("device busy");
+$tunerlock = '/tmp/.recptx.lock';
+open(TUNERSCAN, "< $tunerlock") or die "Can not open lock file ${tunerlock}";
+flock(TUNERSCAN, 1);
+
+$deviceFound = false;
+foreach $card ('0') # Change here for multi-tuner.  Ex ('0', '1')
+{
+    foreach $port ('0', '1')
+    {
+       if(open($t, "<", "/dev/ptx${card}.${tuner}${port}"))
+       {
+           $dev = "/dev/ptx${card}.${tuner}${port}";
+           $mib = "dev.ptx.${card}.${tuner}${port}";
+           $deviceFound = true;
+           last;
+       }
     }
+
+    last if($deviceFound);
 }
 
+die("device busy") if(!$deviceFound);
+
+
 #
 # recording
 #
+close $t;
 system("/sbin/sysctl $mib.freq=$freq >/dev/null 2>&1");
-
 eval {
     local $SIG{ALRM} = sub { die "alarm¥n" };
     alarm $duration;
 
     $pid = fork();
     if ($pid) {
-        close $t;
        wait;
     } else {
        $cmd = sprintf($cmdfmt, $dev, $filename);
-        close $t;
-       exec("$cmd");
+       close(TUNERSCAN);
+       exec($cmd);
     }
 
     alarm 0;

っていうことを通りすがりのおばさんが言ってました。正直私にはなんのことやらさっぱりです。

[参照]

— posted by mu at 10:42 pm   commentComment [0]  pingTrackBack [0]

この記事に対する TrackBack URL:

設定によりTB元のページに、こちらの記事への言及(この記事へのリンク)がなければ、TB受付不可となりますのであらかじめご了承下さい。

コメントをどうぞ。 名前(ペンネーム)と画像認証のひらがな4文字は必須で、ウェブサイトURLはオプションです。

ウェブサイト (U):

タグは使えません。http://・・・ は自動的にリンク表示となります

:) :D 8-) ;-) :P :E :o :( (TT) ):T (--) (++!) ?;w) (-o-) (**!) ;v) f(--; :B l_P~ (QQ)

     

[X] [Top ↑]

T: Y: ALL: Online:
ThemeSwitch
  • Basic
Created in 0.1264 sec.
prev
2014.9
next
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30