<feed xmlns='http://www.w3.org/2005/Atom'>
<title>tmix.git/img/mix_volume.png, branch master</title>
<subtitle>TDE pulseaudio mixer
</subtitle>
<id>https://git.ceux.org/tmix.git/atom?h=master</id>
<link rel='self' href='https://git.ceux.org/tmix.git/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.ceux.org/tmix.git/'/>
<updated>2026-05-15T20:03:08+00:00</updated>
<entry>
<title>PA reconnect: recover cleanly when PulseAudio restarts</title>
<updated>2026-05-15T20:03:08+00:00</updated>
<author>
<name>Calvin Morrison</name>
<email>calvin@pobox.com</email>
</author>
<published>2026-05-15T20:03:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ceux.org/tmix.git/commit/?id=4a8a83f223bbc2b9d18ef91423c1ee807b297b35'/>
<id>urn:sha1:4a8a83f223bbc2b9d18ef91423c1ee807b297b35</id>
<content type='text'>
- On PA_CONTEXT_FAILED/TERMINATED, emit deviceRemoved for all devices
  so UI clears itself, then reconnect after 2s
- Skip pa_context_disconnect and stream detach locks when PA is already
  dead to avoid hang in pa_threaded_mainloop_stop
- Emit defaultOutputChanged(0)/defaultInputChanged(0) before deleting
  devices to prevent dangling pointer crash in TmixTray::setDevice
- Disconnect all device signals before close() to avoid use-after-free
  from cross-device wiring (source→recording levelChanged bridge)
- Icon: generate proper 22x22 (and 16/32/48) from source, install all sizes

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
</feed>
