From 6f67b462980d36ced3705b23c5c8c6a575844da2 Mon Sep 17 00:00:00 2001 From: Tom Early Date: Thu, 2 Jul 2020 10:38:10 -0700 Subject: [PATCH 1/4] Fix orphaned Frame memory leak --- src/cprotocol.cpp | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/cprotocol.cpp b/src/cprotocol.cpp index 7fd4967..12661eb 100644 --- a/src/cprotocol.cpp +++ b/src/cprotocol.cpp @@ -19,7 +19,7 @@ // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License -// along with Foobar. If not, see . +// along with Foobar. If not, see . // ---------------------------------------------------------------------------- #include "main.h" @@ -52,7 +52,7 @@ CProtocol::~CProtocol() m_pThread->join(); delete m_pThread; } - + // empty queue m_Queue.Lock(); while ( !m_Queue.empty() ) @@ -69,13 +69,13 @@ bool CProtocol::Init(void) { // init reflector apparent callsign m_ReflectorCallsign = g_Reflector.GetCallsign(); - + // reset stop flag m_bStopThread = false; // start thread; m_pThread = new std::thread(CProtocol::Thread, this); - + // done return true; } @@ -138,7 +138,12 @@ void CProtocol::OnDvFramePacketIn(CDvFramePacket *Frame, const CIp *Ip) { // find the stream CPacketStream *stream = GetStream(Frame->GetStreamId(), Ip); - if ( stream != NULL ) + if ( stream == NULL ) + { + std::cout << "Deleting oprhaned Frame Packet with StreamId " << Frame->GetStreamId() << " from " << *Ip << std::endl; + delete Frame; + } + else { //std::cout << "DV frame" << "from " << *Ip << std::endl; // and push @@ -152,13 +157,18 @@ void CProtocol::OnDvLastFramePacketIn(CDvLastFramePacket *Frame, const CIp *Ip) { // find the stream CPacketStream *stream = GetStream(Frame->GetStreamId(), Ip); - if ( stream != NULL ) + if ( stream == NULL ) + { + std::cout << "Deleting oprhaned Last Frame Packet with StreamId " << Frame->GetStreamId() << " from " << *Ip << std::endl; + delete Frame; + } + else { // push stream->Lock(); stream->Push(Frame); stream->Unlock(); - + // and close the stream g_Reflector.CloseStream(stream); } @@ -170,7 +180,7 @@ void CProtocol::OnDvLastFramePacketIn(CDvLastFramePacket *Frame, const CIp *Ip) CPacketStream *CProtocol::GetStream(uint16 uiStreamId, const CIp *Ip) { CPacketStream *stream = NULL; - + // find if we have a stream with same streamid in our cache for ( int i = 0; (i < m_Streams.size()) && (stream == NULL); i++ ) { @@ -256,5 +266,3 @@ uint32 CProtocol::ModuleToDmrDestId(char m) const { return (uint32)(m - 'A')+1; } - - From 7fab6c2e661533e6261e81193dd5dcdaf0de79a0 Mon Sep 17 00:00:00 2001 From: LX1IQ Date: Mon, 27 Jul 2020 08:25:31 +0200 Subject: [PATCH 2/4] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ef3f33a..265493d 100644 --- a/README.md +++ b/README.md @@ -134,6 +134,6 @@ XLX Server requires the following ports to be open and forwarded properly for in Pay attention, the XLX Server acts as an YSF Master, which provides 26 wires-x rooms. It has nothing to do with the regular YSFReflector network, hence you don’t need to register your XLX at ysfreflector.de ! - +Nevertheless it is possible. © 2016 Jean-Luc Deltombe (LX3JL) and Luc Engelmann (LX1IQ) From fa7b3e80981fb72f1b21b0bffe8fd331299183f4 Mon Sep 17 00:00:00 2001 From: LX1IQ Date: Sun, 2 Aug 2020 09:56:16 +0200 Subject: [PATCH 3/4] Create watchdog Small watchdog script to check the connectivity to the ambed hardware. If the usb port gets unresponsive and you get persistent timeouts. The script restarts the ambed service. You can run the script every "x" via a cronjob. --- scripts/watchdog | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 scripts/watchdog diff --git a/scripts/watchdog b/scripts/watchdog new file mode 100644 index 0000000..4582bf0 --- /dev/null +++ b/scripts/watchdog @@ -0,0 +1,14 @@ +#!/bin/bash +sleep 5 +PATTERN=timed +FILE=/var/log/syslog +if grep -q $PATTERN $FILE; + then + echo "ambed timeout error" + > /var/log/syslog + service ambed restart + else + echo "all ok" + echo "Exiting..." + exit 0 +fi From 1ed96a16fd796d8e548e745cf67a0220add01f7b Mon Sep 17 00:00:00 2001 From: LX1IQ Date: Sun, 2 Aug 2020 10:02:00 +0200 Subject: [PATCH 4/4] Update scripts.readme.txt --- scripts/scripts.readme.txt | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/scripts/scripts.readme.txt b/scripts/scripts.readme.txt index 4008da3..86bb307 100644 --- a/scripts/scripts.readme.txt +++ b/scripts/scripts.readme.txt @@ -1,11 +1,10 @@ ************************************************* -*copy xlxd into /etc.init.d/ -*copy ambed.service into /etc/systemd/system/ -* +*copy xlxd to /etc.init.d/ +*copy ambed.service to /etc/systemd/system/ +*copy watchdog to /ambed/ ************************************************* * xlxd executable must be in /xlxd/ folder * ambed executable must be in /ambed/ folder -* ************************************************* * possible options: * @@ -18,3 +17,10 @@ * #systemctl enable ambed * ************************************************* +* If your usb port gets unresponsive and you get some persistent timeouts, +* the watchdog script restarts the ambed service. +* You can run it every 5 minutes by a cronjob. +* +* */5 * * * * /ambed/./watchdog >> /ambed/watchdog.log +* +***************************************************