FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: CoolTux am 17 September 2018, 11:58:42

Titel: Frage zu Blocking.pm und der Funktion BlockingKill
Beitrag von: CoolTux am 17 September 2018, 11:58:42
Hallo Rudi,

Warum wird bei einem Aufruf der Funktion BlockingKill ganz am Ende die Funktion BlockingStart(); aufgerufen?
Dies führt bei meinen Usern dazu das der aufgerufende Unixprozess (gatttool) zwar korrekt beendet wird aber danach sofort wieder gestartet wird und dann in der Prozessliste auf ewig bestehen bleibt.
Ein Test mit auskommentierten Funktionsaufruf BlockingStart() bringt eine zu erwartende Aktion. Der gatttool Prozess bleibt aus der Prozessliste raus und wird mit dem nächsten Aufruf durch mein Modul gestartet.


BlockingKill($)
{
  my $h = shift;

  return if($h->{terminated});

#  if($^O !~ m/Win/) {
    if($h->{pid} && $h->{pid} !~ m/:/ && kill(9, $h->{pid})) {
      my $ll = (defined($h->{loglevel}) ? $h->{loglevel} : 1); # Forum #77057
      Log $ll, "Timeout for $h->{fn} reached, terminated process $h->{pid}";
      $h->{terminated} = 1;
      if($h->{abortFn}) {
        no strict "refs";
        my $ret = &{$h->{abortFn}}($h->{abortArg},
                        "Timeout: process terminated");
        use strict "refs";

      } elsif($h->{finishFn}) {
        no strict "refs";
        my $ret = &{$h->{finishFn}}();
        use strict "refs";

      }
      delete($BC_hash{$h->{bc_pid}});
      InternalTimer(gettimeofday()+1, "BlockingStart", \%BC_hash, 0)
        if(looks_like_number($h->{pid}) && kill(0, $h->{pid})); # Forum #58867
    }
#  }
  BlockingStart();
}





Grüße
Titel: Antw:Frage zu Blocking.pm und der Funktion BlockingKill
Beitrag von: rudolfkoenig am 17 September 2018, 13:39:35
ZitatWarum wird bei einem Aufruf der Funktion BlockingKill ganz am Ende die Funktion BlockingStart(); aufgerufen?
Weil danach eine geforkte Instanz weniger am vorhanden ist, und wenn weitere Aufgaben in der Schlange warten (siehe blockingCallMax), dann muessen diese gestartet werden. BlockingStart sollte nichts starten, was nicht in der Warteschlage ist.


ZitatEin Test mit auskommentierten Funktionsaufruf BlockingStart() bringt eine zu erwartende Aktion
Im Anhang hast du aber die Kill-Funktionalitaet fuer Windows aktiviert.
BlockingKill funktioniert leider nicht unter Windows, da hier fork von perl nur emuliert wird.
Titel: Antw:Frage zu Blocking.pm und der Funktion BlockingKill
Beitrag von: CoolTux am 17 September 2018, 14:49:05
Zitat von: rudolfkoenig am 17 September 2018, 13:39:35
Weil danach eine geforkte Instanz weniger am vorhanden ist, und wenn weitere Aufgaben in der Schlange warten (siehe blockingCallMax), dann muessen diese gestartet werden. BlockingStart sollte nichts starten, was nicht in der Warteschlage ist.

Ok leuchtet ein

Zitat von: rudolfkoenig am 17 September 2018, 13:39:35
Im Anhang hast du aber die Kill-Funktionalitaet fuer Windows aktiviert.
BlockingKill funktioniert leider nicht unter Windows, da hier fork von perl nur emuliert wird.

Ich nicht. Ist aus den original svn Sourcen von vor ein paar Tagen
Titel: Antw:Frage zu Blocking.pm und der Funktion BlockingKill
Beitrag von: rudolfkoenig am 17 September 2018, 14:52:59
ZitatIst aus den original svn Sourcen von vor ein paar Tagen
Sorry, war verwirrt, dann sollte BlockingKill unter Windows doch funktionieren.

Falls du immer noch ein Problem hast, und vermutest, dass es an Blocking.pm liegt, dann bitte etwas zum Nachstellen mir geben.
Titel: Antw:Frage zu Blocking.pm und der Funktion BlockingKill
Beitrag von: CoolTux am 17 September 2018, 16:00:48
Zitat von: rudolfkoenig am 17 September 2018, 14:52:59
Sorry, war verwirrt, dann sollte BlockingKill unter Windows doch funktionieren.

Falls du immer noch ein Problem hast, und vermutest, dass es an Blocking.pm liegt, dann bitte etwas zum Nachstellen mir geben.

Wenn ich noch was brauche dann werde ich Dir etwas kurzes zum nachstellen geben. Habe ja selbst das Problem leider nicht. Ist ein User. Danke Dir jedenfalls.