Autor Thema: CommandModify: Löschen des alten %modules defptr-Zeigers  (Gelesen 834 mal)

Offline klaus.schauer

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1083
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.
« Letzte Änderung: 07 Oktober 2015, 06:06:08 von klaus.schauer »

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 22989
Antw: CommandModify: Löschen des alten %modules defptr-Zeigers
« Antwort #1 am: 07 Oktober 2015, 13:50:06 »
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.