Autor Thema: Bug in 70_SISPM.pm  (Gelesen 1199 mal)

Offline 3des

  • Developer
  • New Member
  • ****
  • Beiträge: 13
Bug in 70_SISPM.pm
« am: 03 November 2014, 16:15:15 »
Hallo,

bin mir nicht sicher ob ich hier mit diesem Problem wirklich richtig bin aber beim Forum "Fehlerberichte" steht "Dieses Forum ist geschlossen. Bitte schreibt Beiträge in den modulspezifischen Foren." und ein modulspezifisches Forum zu SISPM konnte ich nicht finden?

SISPM übergibt per $hash->{FD} nicht wie von FHEM erwartet die fileno sondern das handle was dann bei select FHEM crashen läßt. Hat sich da in letzter Zeit irgendwas geändert und das Modul wurde noch nicht nachgezogen?

Hier ein Patch mit dem's wieder laufen sollte:
--- 70_SISPM.pm 2014-11-03 16:09:27.303000000 +0100
+++ 70_SISPM.pm_org 2014-11-03 15:18:57.507000000 +0100
@@ -224,9 +224,8 @@
   my @a = split("[ \t][ \t]*", $def);
   my $name = $hash->{NAME};
 
-  if(defined($hash->{SISPMCTL})) {
-      close($hash->{SISPMCTL});
-      delete $hash->{SISPMCTL};
+  if(defined($hash->{FD})) {
+      close($hash->{FD});
       delete $hash->{FD};
   }
   delete $selectlist{"$name.pipe"};
@@ -264,8 +263,7 @@
  return "SISPM Can't open pipe: $dev: $!";
     }
 
-    $hash->{SISPMCTL}=$FH;
-    $hash->{FD}=fileno($FH);
+    $hash->{FD}=$FH;
     $selectlist{"$name.pipe"} = $hash;
     Log 4, "SISPM pipe opened";
     $hash->{STATE} = "running";
@@ -287,15 +285,15 @@
 
     Log 4, "SISPM Read entered";
 
-    if(!defined($hash->{SISPMCTL})) {
+    if(!defined($hash->{FD})) {
  Log 3, "Oops, SISPM FD undef'd";
  return undef;
     }
-    if(!$hash->{SISPMCTL}) {
+    if(!$hash->{FD}) {
  Log 3, "Oops, SISPM FD empty";
  return undef;
     }
-    $FH = $hash->{SISPMCTL};
+    $FH = $hash->{FD};
 
     Log 4, "SISPM reading started";
 
@@ -382,7 +380,7 @@
      Log 5, "SISPM found SISPM device number $1 (sispmctl v3)";
      $tmpnr=$1;
  }
- if($tmpnr >= 0 && $inputline =~ /^USB information:  bus .*, device (\d+)/) {
+ if($tmpnr >= 0 && $inputline =~ /^USB information:  bus 001, device (\d+)/) {
      Log 5, "SISPM found SISPM device number $tmpnr as USB $1";
      if($tmpnr < $hash->{NUMUNITS}) {
  if($hash->{UNITS}{$tmpnr}{USB}!=$1) {
@@ -436,7 +434,6 @@
 
     if($eof) {
  close($FH);
- delete $hash->{SISPMCTL};
  delete $hash->{FD};
  delete $selectlist{"$name.pipe"};
  InternalTimer(gettimeofday()+ $hash->{Timer}, "SISPM_GetStatus", $hash, 1);

Kann das bitte jemand (wusel?) einspielen?

Schöne Grüße,
Manfred

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24135
Antw:Bug in 70_SISPM.pm
« Antwort #1 am: 03 November 2014, 16:29:37 »
Hier steht, wo man was posten soll, du bist also hier richtig.

Ich weiss nicht, ob wusel mitliest, ich habe ihn in der Mitgliederliste mit seinem Pseudonymen (painseeker/real-wusel) nicht gefunden, und er hat das Modul seit zwei Jahren nicht angefasst. Falls er sich innerhab von 3 Wochen nicht meldet, dann muessen wir einen neuen Maintainer suchen.

Und ich habe gerade eben einen Kandidaten gefunden :)

Offline 3des

  • Developer
  • New Member
  • ****
  • Beiträge: 13
Antw:Bug in 70_SISPM.pm
« Antwort #2 am: 03 November 2014, 19:43:27 »
lol... patch ist "invertiert".

So sollts passen:
--- 70_SISPM.pm 2014-11-03 16:58:53.593000000 +0100
+++ 70_SISPM.pm_neu 2014-11-03 17:07:12.018000000 +0100
@@ -224,8 +224,9 @@
   my @a = split("[ \t][ \t]*", $def);
   my $name = $hash->{NAME};
 
-  if(defined($hash->{FD})) {
-      close($hash->{FD});
+  if(defined($hash->{SISPMCTL})) {
+      close($hash->{SISPMCTL});
+      delete $hash->{SISPMCTL};
       delete $hash->{FD};
   }
   delete $selectlist{"$name.pipe"};
@@ -263,7 +264,8 @@
  return "SISPM Can't open pipe: $dev: $!";
     }
 
-    $hash->{FD}=$FH;
+    $hash->{SISPMCTL}=$FH; 
+    $hash->{FD}=fileno($FH);
     $selectlist{"$name.pipe"} = $hash;
     Log 4, "SISPM pipe opened";
     $hash->{STATE} = "running";
@@ -285,15 +287,15 @@
 
     Log 4, "SISPM Read entered";
 
-    if(!defined($hash->{FD})) {
+    if(!defined($hash->{SISPMCTL})) {
  Log 3, "Oops, SISPM FD undef'd";
  return undef;
     }
-    if(!$hash->{FD}) {
+    if(!$hash->{SISPMCTL}) {
  Log 3, "Oops, SISPM FD empty";
  return undef;
     }
-    $FH = $hash->{FD};
+    $FH = $hash->{SISPMCTL};
 
     Log 4, "SISPM reading started";
 
@@ -380,7 +382,7 @@
      Log 5, "SISPM found SISPM device number $1 (sispmctl v3)";
      $tmpnr=$1;
  }
- if($tmpnr >= 0 && $inputline =~ /^USB information:  bus 001, device (\d+)/) {
+ if($tmpnr >= 0 && $inputline =~ /^USB information:  bus .*, device (\d+)/) {
      Log 5, "SISPM found SISPM device number $tmpnr as USB $1";
      if($tmpnr < $hash->{NUMUNITS}) {
  if($hash->{UNITS}{$tmpnr}{USB}!=$1) {
@@ -434,6 +436,7 @@
 
     if($eof) {
  close($FH);
+ delete $hash->{SISPMCTL};
  delete $hash->{FD};
  delete $selectlist{"$name.pipe"};
  InternalTimer(gettimeofday()+ $hash->{Timer}, "SISPM_GetStatus", $hash, 1);

ich will wusel hier nicht seinen Job streitig machen, habe ja selbst noch so einige Module geplant...

sollte sich wusel aber wirklich garnicht melden, können wir ja nochmal drüber reden, vielleicht hab ich bis dahin ja dann auch meine "benamten" und zyklischen Timer ;)

 

decade-submarginal