diff --git a/fhem/FHEM/TcpServerUtils.pm b/fhem/FHEM/TcpServerUtils.pm index ae8e7b0bb..b954d2743 100644 --- a/fhem/FHEM/TcpServerUtils.pm +++ b/fhem/FHEM/TcpServerUtils.pm @@ -213,8 +213,12 @@ TcpServer_Close($@) delete($hash->{CD}); delete($selectlist{$name}); delete($hash->{FD}); # Avoid Read->Close->Write - delete $attr{$name} if($dodel); - delete $defs{$name} if($dodel); + if($dodel) { + delete $attr{$name}; + delete $defs{$name}; + } else { + $hash->{stacktrace} = stacktraceAsString(1); + } } if(defined($hash->{SERVERSOCKET})) { # Server close($hash->{SERVERSOCKET}); @@ -243,6 +247,7 @@ TcpServer_Disown($) delete($hash->{CD}); delete($selectlist{$name}); delete($hash->{FD}); # Avoid Read->Close->Write + $hash->{stacktrace} = stacktraceAsString(1); } return; diff --git a/fhem/fhem.pl b/fhem/fhem.pl index 7647f7896..2baaaca2a 100755 --- a/fhem/fhem.pl +++ b/fhem/fhem.pl @@ -5365,6 +5365,14 @@ addToWritebuffer($$@) { my ($hash, $txt, $callback, $nolimit) = @_; + if(!defined($hash->{FD})) { + my $n = $hash->{NAME}; + Log 1, "ERROR: addToWritebuffer for $n without FD"; + Log 1, "probably caused at ".$hash->{stacktrace} if($hash->{stacktrace}); + delete($defs{$n}); + delete($attr{$n}); + return; + } if($hash->{isChild}) { # Wont go to the main select in a forked process TcpServer_WriteBlocking( $hash, $txt ); if($callback) {