CommandModify: Löschen des alten %modules defptr-Zeigers

Begonnen von klaus.schauer, 06 Oktober 2015, 21:46:32

Vorheriges Thema - Nächstes Thema

klaus.schauer

Für das EnOcean-Modul wurde beim Aufruf von CommandModify der alte %modules defptr-Zeiger bisher nicht gelöscht. Jetzt wird dies über EnOcean_Notify erledigt:

    } elsif ($devName eq "global" && $s =~ m/^MODIFIED ([^ ]*)$/) {
      # delete old DEF pointer in %modules
      my ($key, $val);
      my $modulesPointer = \%modules;
      while (($key, $val) = each(%{$modulesPointer->{EnOcean}{defptr}})) {
        if ($val == $hash && $key ne $hash->{DEF}) {
          delete $modules{EnOcean}{defptr}{$key};
        }
      }

Wäre es nicht sinnvoller, dies in der Routine CommandModify selbst zu lösen, indem CallFn($a[0], "UndefFn", ... vor CallFn($a[0], "DefFn", ... aufgerufen würde? Für das EnOcean-Modul wäre m. E. die bessere Lösung. Ob es in anderen Modulen zu Problemen führt, kann ich nicht beurteilen.

rudolfkoenig

Es geht viel gefahrloser, indem man im DefineFn auf das Vorhandensein von $hash->{OLDDEF} prueft, und anhand dieser Daten die notwendigen Schritte durchfuehrt.
Ein modify soll mehr als ein "delete+define" ermoeglichen, auch wenn das in vielen Faellen so gehandhabt wird.