OnkelAtze
Spezialist
Das Problem war: StreamRelayDelayModv2.patch hat mehrere Threads auf dieselben Daten losgelassen, ohne sie sauber zu schützen.
Ein Thread schreibt Streamdaten, ein anderer liest und entschlüsselt sie, ein weiterer setzt neue CWs.
Ohne korrektes Locking kann dabei "Mist" passieren: kaputte TS-Pakete, falsche CW, Crashes oder sporadische Fehler...
Darum kamen die pthread_mutex rein.
Durch Writer-Thread gemeinsam erzeugte Zustände:
Ringbuffer wird gleichzeitig gelesen und geschrieben.
CWs können gleichzeitig gesetzt, gelesen und freigegeben werden.
realloc() im Buffer wäre mit alten Pointern gefährlich.
Auf 32-bit/MIPS sind manche größere Werte nicht automatisch sicher lesbar.
Meine Version macht jetzt:
Daten werden kurz aus dem Ringbuffer kopiert, danach wird ohne Lock entschlüsselt und gesendet.
Der Ringbuffer ist geschützt.
CW Zustand ist geschützt.
send() behandelt Teilsendungen korrekt.
StreamRelayDelayModv3.patch ist der saubere Build-Stand. (aus meiner Sicht)
Ob er im Livebetrieb auf einer Box wirklich stabil läuft, können nur echte Test zeigen.
Ein Thread schreibt Streamdaten, ein anderer liest und entschlüsselt sie, ein weiterer setzt neue CWs.
Ohne korrektes Locking kann dabei "Mist" passieren: kaputte TS-Pakete, falsche CW, Crashes oder sporadische Fehler...
Darum kamen die pthread_mutex rein.
Durch Writer-Thread gemeinsam erzeugte Zustände:
Ringbuffer wird gleichzeitig gelesen und geschrieben.
CWs können gleichzeitig gesetzt, gelesen und freigegeben werden.
realloc() im Buffer wäre mit alten Pointern gefährlich.
Auf 32-bit/MIPS sind manche größere Werte nicht automatisch sicher lesbar.
Meine Version macht jetzt:
Daten werden kurz aus dem Ringbuffer kopiert, danach wird ohne Lock entschlüsselt und gesendet.
Der Ringbuffer ist geschützt.
CW Zustand ist geschützt.
send() behandelt Teilsendungen korrekt.
StreamRelayDelayModv3.patch ist der saubere Build-Stand. (aus meiner Sicht)
Ob er im Livebetrieb auf einer Box wirklich stabil läuft, können nur echte Test zeigen.
Anhänge
Sie müssen registriert sein, um die Liste der Anhänge zu sehen
Zuletzt bearbeitet:
