Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package dealers-choice for openSUSE:Factory 
checked in at 2026-04-01 19:52:39
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/dealers-choice (Old)
 and      /work/SRC/openSUSE:Factory/.dealers-choice.new.21863 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "dealers-choice"

Wed Apr  1 19:52:39 2026 rev:8 rq:1344109 version:0.0.11

Changes:
--------
--- /work/SRC/openSUSE:Factory/dealers-choice/dealers-choice.changes    
2026-03-31 15:23:15.978762586 +0200
+++ /work/SRC/openSUSE:Factory/.dealers-choice.new.21863/dealers-choice.changes 
2026-04-01 19:54:32.410880447 +0200
@@ -1,0 +2,12 @@
+Wed Apr 01 09:20:16 UTC 2026 - Andy Alt <[email protected]>
+
+- dealers-choice 0.0.11:
+
+  * bugfix: uninitialize miniaudio engine on sound load failure
+    Previously called exit() without ma_engine_uninit(), locking the audio
+    device and blocking other applications until it was replugged or the
+    system was restarted (#198)
+  * Change dealer rotation timeout from 60 seconds to 30
+  * Add version line to changes entry for v0.0.10
+
+-------------------------------------------------------------------
@@ -3,0 +16 @@
+- dealers-choice 0.0.10:

Old:
----
  dealers-choice-0.0.10.tar.xz

New:
----
  dealers-choice-0.0.11.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ dealers-choice.spec ++++++
--- /var/tmp/diff_new_pack.sVnlBo/_old  2026-04-01 19:54:33.326918603 +0200
+++ /var/tmp/diff_new_pack.sVnlBo/_new  2026-04-01 19:54:33.330918770 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           dealers-choice
-Version:        0.0.10
+Version:        0.0.11
 Release:        0
 Summary:        Online Multiplayer Stud and Draw Poker
 License:        MIT

++++++ dealers-choice-0.0.10.tar.xz -> dealers-choice-0.0.11.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dealers-choice-0.0.10/.github/workflows/coverity.yml 
new/dealers-choice-0.0.11/.github/workflows/coverity.yml
--- old/dealers-choice-0.0.10/.github/workflows/coverity.yml    2026-03-30 
16:22:05.000000000 +0200
+++ new/dealers-choice-0.0.11/.github/workflows/coverity.yml    2026-04-01 
09:23:45.000000000 +0200
@@ -80,6 +80,8 @@
         # Command to pass to cov-build.
         command: 'meson compile -C _build'
 
+        cov_analyze_args: '--modeling-file coverity/miniaudio_model.c'
+
         # (Informational) The source version being built.
         #
         # Default: ${{ github.sha }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dealers-choice-0.0.10/.github/workflows/windows.yml 
new/dealers-choice-0.0.11/.github/workflows/windows.yml
--- old/dealers-choice-0.0.10/.github/workflows/windows.yml     2026-03-30 
16:22:05.000000000 +0200
+++ new/dealers-choice-0.0.11/.github/workflows/windows.yml     2026-04-01 
09:23:45.000000000 +0200
@@ -129,19 +129,24 @@
           fi
           echo "VERSION=${VERSION}" >> "$GITHUB_ENV"
         fi
+        case "${{ matrix.platform }}" in
+          CLANGARM64) ARCH="aarch64" ;;
+          *)           ARCH="x86_64"  ;;
+        esac
+        echo "ARCH=${ARCH}" >> "$GITHUB_ENV"
 
     - name: Build installer
       if: matrix.platform == 'UCRT64'
       shell: pwsh
       run: |
-        iscc /DVERSION=$env:VERSION packaging\windows\dealers-choice.iss
+        iscc /DVERSION=$env:VERSION /DARCH=$env:ARCH 
packaging\windows\dealers-choice.iss
         if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
 
     - name: Checksum
       if: matrix.platform == 'UCRT64'
       shell: pwsh
       run: |
-        $file = "dealers-choice-$env:VERSION-setup.exe"
+        $file = "dealers-choice-$env:VERSION-$env:ARCH-setup.exe"
         $hash = (Get-FileHash $file -Algorithm SHA256).Hash.ToLower()
         "$hash  $file" | Out-File -Encoding ascii "$file.sha256sum"
 
@@ -150,14 +155,14 @@
       uses: actions/upload-artifact@v7
       with:
         name: dealers-choice-windows-installer
-        path: dealers-choice-${{ env.VERSION }}-setup.exe*
+        path: dealers-choice-${{ env.VERSION }}-${{ env.ARCH }}-setup.exe*
         if-no-files-found: error
 
     - name: Prerelease (trunk)
       if: matrix.platform == 'UCRT64' && github.ref == 'refs/heads/trunk'
       uses: ncipollo/release-action@v1
       with:
-        artifacts: "dealers-choice-${{ env.VERSION }}-setup.exe*"
+        artifacts: "dealers-choice-${{ env.VERSION }}-${{ env.ARCH 
}}-setup.exe*"
         body: "Dealer's Choice Snapshot Release"
         allowUpdates: true
         prerelease: true
@@ -169,10 +174,11 @@
         token: ${{ secrets.GITHUB_TOKEN }}
 
     - name: Release (tagged)
-      if: matrix.platform == 'UCRT64' && startsWith(github.ref, 'refs/tags/')
+      if: matrix.platform == 'UCRT64' && (startsWith(github.ref, 'refs/tags/') 
|| inputs.version != '')
       uses: ncipollo/release-action@v1
       with:
-        artifacts: "dealers-choice-${{ env.VERSION }}-setup.exe*"
+        artifacts: "dealers-choice-${{ env.VERSION }}-${{ env.ARCH 
}}-setup.exe*"
+        tag: ${{ inputs.version != '' && format('v{0}', env.VERSION) || '' }}
         allowUpdates: true
         prerelease: false
         omitBodyDuringUpdate: true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dealers-choice-0.0.10/ChangeLog 
new/dealers-choice-0.0.11/ChangeLog
--- old/dealers-choice-0.0.10/ChangeLog 2026-03-30 16:22:05.000000000 +0200
+++ new/dealers-choice-0.0.11/ChangeLog 2026-04-01 09:23:45.000000000 +0200
@@ -1,3 +1,13 @@
+2026-04-01
+
+- dealers-choice 0.0.11:
+
+  * bugfix: uninitialize miniaudio engine on sound load failure
+    Previously called exit() without ma_engine_uninit(), locking the audio
+    device and blocking other applications until it was replugged or the
+    system was restarted (#198)
+  * Change dealer rotation timeout from 60 seconds to 30
+
 2026-03-30
 
 - dealers-choice 0.0.10:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dealers-choice-0.0.10/README.md 
new/dealers-choice-0.0.11/README.md
--- old/dealers-choice-0.0.10/README.md 2026-03-30 16:22:05.000000000 +0200
+++ new/dealers-choice-0.0.11/README.md 2026-04-01 09:23:45.000000000 +0200
@@ -24,16 +24,14 @@
 * [Game Results](https://dealer-s-choice.github.io/game_results.html)
 * [Discussions](https://github.com/Dealer-s-Choice/dealers_choice/discussions)
 * [Bug Reporting](https://github.com/Dealer-s-Choice/dealers_choice/issues)
-* [Releases](https://github.com/Dealer-s-Choice/dealers_choice/releases)
+* [Releases](https://github.com/Dealer-s-Choice/dealers_choice/releases/latest)
 
 ## Current state
 
 The game is in alpha so you may encounter bugs.
 
-Here's a proofread version with a couple of small fixes:
-
 *Dealer's Choice* builds on Windows in an MSYS2 environment. [Release
-versions](https://github.com/Dealer-s-Choice/dealers-choice/releases) are
+versions](https://github.com/Dealer-s-Choice/dealers-choice/releases/latest) 
are
 available as of v0.0.10. There is a development snapshot installer available
 on [the snapshots
 page](https://github.com/Dealer-s-Choice/dealers-choice/releases/tag/snapshot).
@@ -111,7 +109,7 @@
 ## Note on AppImages
 
 If you're a Linux user, you can download the AppImage from the [Releases
-page](https://github.com/Dealer-s-Choice/dealers_choice/releases), or install
+page](https://github.com/Dealer-s-Choice/dealers_choice/releases/latest), or 
install
 it with [AppMan](https://github.com/ivan-hc/AM).
 
 ## Libraries
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dealers-choice-0.0.10/coverity/miniaudio_model.c 
new/dealers-choice-0.0.11/coverity/miniaudio_model.c
--- old/dealers-choice-0.0.10/coverity/miniaudio_model.c        1970-01-01 
01:00:00.000000000 +0100
+++ new/dealers-choice-0.0.11/coverity/miniaudio_model.c        2026-04-01 
09:23:45.000000000 +0200
@@ -0,0 +1,48 @@
+/*
+ * Coverity modeling file for miniaudio.
+ *
+ * Teaches Coverity about the acquire/release semantics of the miniaudio
+ * engine and sound init/uninit functions so that resource leaks — such as
+ * calling exit() or returning without ma_engine_uninit() / ma_sound_uninit()
+ * — are detected during scans.
+ *
+ * Pass to cov-analyze with: --modeling-file coverity/miniaudio_model.c
+ */
+
+typedef int ma_result;
+/* MA_SUCCESS == 0 */
+
+void __coverity_resource_acquire__(void);
+void __coverity_resource_release__(void);
+
+typedef struct ma_engine        ma_engine;
+typedef struct ma_engine_config ma_engine_config;
+typedef struct ma_sound         ma_sound;
+
+ma_result ma_engine_init(const ma_engine_config *pConfig, ma_engine *pEngine)
+{
+  ma_result r;
+  if (r == 0)
+    __coverity_resource_acquire__();
+  return r;
+}
+
+void ma_engine_uninit(ma_engine *pEngine)
+{
+  __coverity_resource_release__();
+}
+
+ma_result ma_sound_init_from_file(ma_engine *pEngine, const char *pFilePath,
+                                  unsigned int flags, void *pGroup,
+                                  void *pAllocationCallbacks, ma_sound *pSound)
+{
+  ma_result r;
+  if (r == 0)
+    __coverity_resource_acquire__();
+  return r;
+}
+
+void ma_sound_uninit(ma_sound *pSound)
+{
+  __coverity_resource_release__();
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dealers-choice-0.0.10/data/server.conf 
new/dealers-choice-0.0.11/data/server.conf
--- old/dealers-choice-0.0.10/data/server.conf  2026-03-30 16:22:05.000000000 
+0200
+++ new/dealers-choice-0.0.11/data/server.conf  2026-04-01 09:23:45.000000000 
+0200
@@ -4,7 +4,7 @@
 action_timeout_ms = 30000
 action_timeout_max = 3
 wild_exchange_timeout_ms = 40000
-dealer_timeout_ms = 60000
+dealer_timeout_ms = 30000
 ante = 50
 starting_coins = 20000
 max_raises = 3
Binary files old/dealers-choice-0.0.10/data/sounds/game_over.wav and 
new/dealers-choice-0.0.11/data/sounds/game_over.wav differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dealers-choice-0.0.10/meson.build 
new/dealers-choice-0.0.11/meson.build
--- old/dealers-choice-0.0.10/meson.build       2026-03-30 16:22:05.000000000 
+0200
+++ new/dealers-choice-0.0.11/meson.build       2026-04-01 09:23:45.000000000 
+0200
@@ -1,7 +1,7 @@
 project(
   'dealers-choice',
   ['c'],
-  version: '0.0.10',
+  version: '0.0.11',
   meson_version: '>= 0.61.0',
   default_options: [
     'warning_level=3',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dealers-choice-0.0.10/packaging/PKGBUILD 
new/dealers-choice-0.0.11/packaging/PKGBUILD
--- old/dealers-choice-0.0.10/packaging/PKGBUILD        2026-03-30 
16:22:05.000000000 +0200
+++ new/dealers-choice-0.0.11/packaging/PKGBUILD        2026-04-01 
09:23:45.000000000 +0200
@@ -1,17 +1,17 @@
 # Maintainer: Andy Alt <arch_stanton5995 at proton.me>
 
 pkgname=dealers-choice
-pkgver=0.0.10
+pkgver=0.0.11
 pkgrel=1
 pkgdesc="Online Multiplayer Stud and Draw Poker"
 arch=('x86_64' 'aarch64')
 url="https://github.com/Dealer-s-Choice/dealers_choice";
 license=('MIT')
-depends=('libsodium' 'sdl2' 'sdl2_ttf' 'sdl2_image' 'sdl2_net' 'protobuf-c' 
'hicolor-icon-theme')
+depends=('canfigger' 'libsodium' 'sdl2' 'sdl2_ttf' 'sdl2_image' 'sdl2_net' 
'protobuf-c' 'hicolor-icon-theme')
 makedepends=('cmake' 'meson' 'ninja')
 
 
source=("https://github.com/Dealer-s-Choice/dealers_choice/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.xz";)
-sha256sums=('SKIP')
+sha256sums=('8fb7c8a544ea3a7b025fe1e321ba42f0a4cb36102219449f8236d3d37b26cf45')
 
 build() {
   arch-meson $pkgname-$pkgver build -Db_sanitize=none
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/dealers-choice-0.0.10/packaging/Slackbuild/dealers-choice/dealers-choice.SlackBuild
 
new/dealers-choice-0.0.11/packaging/Slackbuild/dealers-choice/dealers-choice.SlackBuild
--- 
old/dealers-choice-0.0.10/packaging/Slackbuild/dealers-choice/dealers-choice.SlackBuild
     2026-03-30 16:22:05.000000000 +0200
+++ 
new/dealers-choice-0.0.11/packaging/Slackbuild/dealers-choice/dealers-choice.SlackBuild
     2026-04-01 09:23:45.000000000 +0200
@@ -25,7 +25,7 @@
 cd $(dirname $0) ; CWD=$(pwd)
 
 PRGNAM=dealers-choice
-VERSION=${VERSION:-0.0.10}
+VERSION=${VERSION:-0.0.11}
 BUILD=${BUILD:-1}
 TAG=${TAG:-_SBo}
 PKGTYPE=${PKGTYPE:-tgz}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/dealers-choice-0.0.10/packaging/Slackbuild/dealers-choice/dealers-choice.info
 
new/dealers-choice-0.0.11/packaging/Slackbuild/dealers-choice/dealers-choice.info
--- 
old/dealers-choice-0.0.10/packaging/Slackbuild/dealers-choice/dealers-choice.info
   2026-03-30 16:22:05.000000000 +0200
+++ 
new/dealers-choice-0.0.11/packaging/Slackbuild/dealers-choice/dealers-choice.info
   2026-04-01 09:23:45.000000000 +0200
@@ -1,10 +1,10 @@
 PRGNAM="dealers-choice"
-VERSION="0.0.10"
+VERSION="0.0.11"
 HOMEPAGE="https://dealer-s-choice.github.io/";
-DOWNLOAD="https://github.com/Dealer-s-Choice/dealers-choice/releases/download/v0.0.10/dealers-choice-0.0.10.tar.xz";
-MD5SUM=""
+DOWNLOAD="https://github.com/Dealer-s-Choice/dealers-choice/releases/download/v0.0.11/dealers-choice-0.0.11.tar.xz";
+MD5SUM="9c1b25ccde17327230d9a5cd2af9bc46"
 DOWNLOAD_x86_64=""
 MD5SUM_x86_64=""
-REQUIRES="libsodium protobuf-c python3-meson-opt"
+REQUIRES="canfigger protobuf-c python3-meson-opt"
 MAINTAINER="Andy Alt"
 EMAIL="[email protected]"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dealers-choice-0.0.10/packaging/release-process.txt 
new/dealers-choice-0.0.11/packaging/release-process.txt
--- old/dealers-choice-0.0.10/packaging/release-process.txt     2026-03-30 
16:22:05.000000000 +0200
+++ new/dealers-choice-0.0.11/packaging/release-process.txt     2026-04-01 
09:23:45.000000000 +0200
@@ -12,7 +12,7 @@
 ## Every release
 
 - Ensure all CI workflows are passing on trunk
-- Run the full test suite locally: meson test
+- Checkout release branch
 - Update ChangeLog: set the release date and version (replace "in progress")
 - Bump version in meson.build (remove -dev suffix)
 - Update po and pot files:
@@ -22,6 +22,13 @@
     'b_sanitize=address,undefined',
     'b_lundef=false'
 - Commit the above changes
+- meson setup _release
+- meson dist --include-subprojects (runs tests)
+
+- mv 
~/src/DealersChoice/dealers_choice/_release/meson-dist/dealers-choice-0.0.*.tar.xz*
 \
+      ~/src/DealersChoice/
+
+- Update packaging; make sure they build (PKGBUILD, Slackbuild)
 - Create GitHub release from the tag, paste the ChangeLog entry as notes
 - Close milestone 
(https://github.com/Dealer-s-Choice/dealers_choice/milestones)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/dealers-choice-0.0.10/packaging/windows/dealers-choice.iss 
new/dealers-choice-0.0.11/packaging/windows/dealers-choice.iss
--- old/dealers-choice-0.0.10/packaging/windows/dealers-choice.iss      
2026-03-30 16:22:05.000000000 +0200
+++ new/dealers-choice-0.0.11/packaging/windows/dealers-choice.iss      
2026-04-01 09:23:45.000000000 +0200
@@ -7,6 +7,9 @@
 #ifndef VERSION
   #define VERSION "0.0.0"
 #endif
+#ifndef ARCH
+  #define ARCH "x86_64"
+#endif
 
 [Setup]
 AppName={#AppName}
@@ -19,7 +22,7 @@
 DefaultGroupName={#AppName}
 ; Output goes to the repo root (script is in packaging/windows/)
 OutputDir=..\..\
-OutputBaseFilename=dealers-choice-{#VERSION}-setup
+OutputBaseFilename=dealers-choice-{#VERSION}-{#ARCH}-setup
 Compression=lzma
 SolidCompression=yes
 WizardStyle=modern
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dealers-choice-0.0.10/po/de.po 
new/dealers-choice-0.0.11/po/de.po
--- old/dealers-choice-0.0.10/po/de.po  2026-03-30 16:22:05.000000000 +0200
+++ new/dealers-choice-0.0.11/po/de.po  2026-04-01 09:23:45.000000000 +0200
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: dealers-choice\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-30 06:34-0500\n"
+"POT-Creation-Date: 2026-03-31 23:08-0500\n"
 "PO-Revision-Date: 2025-06-19 21:52-0500\n"
 "Last-Translator: Andy <[email protected]>\n"
 "Language-Team: German <[email protected]>\n"
@@ -41,56 +41,56 @@
 msgid "Waiting for dealer to select game..."
 msgstr ""
 
-#: src/client.c:188 src/client.c:1658
+#: src/client.c:188 src/client.c:1662
 msgid "Kick"
 msgstr ""
 
-#: src/client.c:190 src/client.c:1660
+#: src/client.c:190 src/client.c:1664
 msgid "Ban"
 msgstr ""
 
 #. Show dealing screen immediately after click
-#: src/client.c:515
+#: src/client.c:519
 msgid "Dealing..."
 msgstr ""
 
-#: src/client.c:1248
+#: src/client.c:1252
 msgid "Check"
 msgstr "Prüfen"
 
-#: src/client.c:1248
+#: src/client.c:1252
 msgid "Bet"
 msgstr "Setzen"
 
-#: src/client.c:1249
+#: src/client.c:1253
 msgid "Fold"
 msgstr "Aufgeben"
 
-#: src/client.c:1249
+#: src/client.c:1253
 msgid "Call"
 msgstr "Mitgehen"
 
-#: src/client.c:1250
+#: src/client.c:1254
 msgid "Raise"
 msgstr "Erhöhen"
 
-#: src/client.c:1250
+#: src/client.c:1254
 msgid "Discard"
 msgstr "Ablegen"
 
-#: src/client.c:1251
+#: src/client.c:1255
 msgid "Exchange"
 msgstr ""
 
-#: src/client.c:1603
+#: src/client.c:1607
 msgid "Click a 2, then choose value and suit to assign."
 msgstr ""
 
-#: src/client.c:2461
+#: src/client.c:2467
 msgid "Cancel"
 msgstr ""
 
-#: src/client.c:2468 src/client.c:2484
+#: src/client.c:2474 src/client.c:2490
 #, c-format
 msgid "Attempting connection to: %s... (%d/%d)"
 msgstr ""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dealers-choice-0.0.10/po/dealers-choice.pot 
new/dealers-choice-0.0.11/po/dealers-choice.pot
--- old/dealers-choice-0.0.10/po/dealers-choice.pot     2026-03-30 
16:22:05.000000000 +0200
+++ new/dealers-choice-0.0.11/po/dealers-choice.pot     2026-04-01 
09:23:45.000000000 +0200
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: dealers-choice\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-30 06:34-0500\n"
+"POT-Creation-Date: 2026-03-31 23:08-0500\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <[email protected]>\n"
@@ -41,56 +41,56 @@
 msgid "Waiting for dealer to select game..."
 msgstr ""
 
-#: src/client.c:188 src/client.c:1658
+#: src/client.c:188 src/client.c:1662
 msgid "Kick"
 msgstr ""
 
-#: src/client.c:190 src/client.c:1660
+#: src/client.c:190 src/client.c:1664
 msgid "Ban"
 msgstr ""
 
 #. Show dealing screen immediately after click
-#: src/client.c:515
+#: src/client.c:519
 msgid "Dealing..."
 msgstr ""
 
-#: src/client.c:1248
+#: src/client.c:1252
 msgid "Check"
 msgstr ""
 
-#: src/client.c:1248
+#: src/client.c:1252
 msgid "Bet"
 msgstr ""
 
-#: src/client.c:1249
+#: src/client.c:1253
 msgid "Fold"
 msgstr ""
 
-#: src/client.c:1249
+#: src/client.c:1253
 msgid "Call"
 msgstr ""
 
-#: src/client.c:1250
+#: src/client.c:1254
 msgid "Raise"
 msgstr ""
 
-#: src/client.c:1250
+#: src/client.c:1254
 msgid "Discard"
 msgstr ""
 
-#: src/client.c:1251
+#: src/client.c:1255
 msgid "Exchange"
 msgstr ""
 
-#: src/client.c:1603
+#: src/client.c:1607
 msgid "Click a 2, then choose value and suit to assign."
 msgstr ""
 
-#: src/client.c:2461
+#: src/client.c:2467
 msgid "Cancel"
 msgstr ""
 
-#: src/client.c:2468 src/client.c:2484
+#: src/client.c:2474 src/client.c:2490
 #, c-format
 msgid "Attempting connection to: %s... (%d/%d)"
 msgstr ""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dealers-choice-0.0.10/po/es.po 
new/dealers-choice-0.0.11/po/es.po
--- old/dealers-choice-0.0.10/po/es.po  2026-03-30 16:22:05.000000000 +0200
+++ new/dealers-choice-0.0.11/po/es.po  2026-04-01 09:23:45.000000000 +0200
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: dealers-choice\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-30 06:34-0500\n"
+"POT-Creation-Date: 2026-03-31 23:08-0500\n"
 "PO-Revision-Date: 2025-07-02 00:18-0500\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -41,56 +41,56 @@
 msgid "Waiting for dealer to select game..."
 msgstr ""
 
-#: src/client.c:188 src/client.c:1658
+#: src/client.c:188 src/client.c:1662
 msgid "Kick"
 msgstr ""
 
-#: src/client.c:190 src/client.c:1660
+#: src/client.c:190 src/client.c:1664
 msgid "Ban"
 msgstr ""
 
 #. Show dealing screen immediately after click
-#: src/client.c:515
+#: src/client.c:519
 msgid "Dealing..."
 msgstr ""
 
-#: src/client.c:1248
+#: src/client.c:1252
 msgid "Check"
 msgstr "Pasar"
 
-#: src/client.c:1248
+#: src/client.c:1252
 msgid "Bet"
 msgstr "Apostar"
 
-#: src/client.c:1249
+#: src/client.c:1253
 msgid "Fold"
 msgstr "Retirarse"
 
-#: src/client.c:1249
+#: src/client.c:1253
 msgid "Call"
 msgstr "Igualar"
 
-#: src/client.c:1250
+#: src/client.c:1254
 msgid "Raise"
 msgstr "Subir"
 
-#: src/client.c:1250
+#: src/client.c:1254
 msgid "Discard"
 msgstr "Descartar"
 
-#: src/client.c:1251
+#: src/client.c:1255
 msgid "Exchange"
 msgstr ""
 
-#: src/client.c:1603
+#: src/client.c:1607
 msgid "Click a 2, then choose value and suit to assign."
 msgstr ""
 
-#: src/client.c:2461
+#: src/client.c:2467
 msgid "Cancel"
 msgstr ""
 
-#: src/client.c:2468 src/client.c:2484
+#: src/client.c:2474 src/client.c:2490
 #, c-format
 msgid "Attempting connection to: %s... (%d/%d)"
 msgstr ""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dealers-choice-0.0.10/po/es_CO.po 
new/dealers-choice-0.0.11/po/es_CO.po
--- old/dealers-choice-0.0.10/po/es_CO.po       2026-03-30 16:22:05.000000000 
+0200
+++ new/dealers-choice-0.0.11/po/es_CO.po       2026-04-01 09:23:45.000000000 
+0200
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: dealers-choice\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-30 06:34-0500\n"
+"POT-Creation-Date: 2026-03-31 23:08-0500\n"
 "PO-Revision-Date: 2025-07-02 00:18-0500\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -41,56 +41,56 @@
 msgid "Waiting for dealer to select game..."
 msgstr ""
 
-#: src/client.c:188 src/client.c:1658
+#: src/client.c:188 src/client.c:1662
 msgid "Kick"
 msgstr ""
 
-#: src/client.c:190 src/client.c:1660
+#: src/client.c:190 src/client.c:1664
 msgid "Ban"
 msgstr ""
 
 #. Show dealing screen immediately after click
-#: src/client.c:515
+#: src/client.c:519
 msgid "Dealing..."
 msgstr ""
 
-#: src/client.c:1248
+#: src/client.c:1252
 msgid "Check"
 msgstr "Pasar"
 
-#: src/client.c:1248
+#: src/client.c:1252
 msgid "Bet"
 msgstr "Apostar"
 
-#: src/client.c:1249
+#: src/client.c:1253
 msgid "Fold"
 msgstr "Retirarse"
 
-#: src/client.c:1249
+#: src/client.c:1253
 msgid "Call"
 msgstr "Igualar"
 
-#: src/client.c:1250
+#: src/client.c:1254
 msgid "Raise"
 msgstr "Subir la apuesta"
 
-#: src/client.c:1250
+#: src/client.c:1254
 msgid "Discard"
 msgstr "Descartar"
 
-#: src/client.c:1251
+#: src/client.c:1255
 msgid "Exchange"
 msgstr ""
 
-#: src/client.c:1603
+#: src/client.c:1607
 msgid "Click a 2, then choose value and suit to assign."
 msgstr ""
 
-#: src/client.c:2461
+#: src/client.c:2467
 msgid "Cancel"
 msgstr ""
 
-#: src/client.c:2468 src/client.c:2484
+#: src/client.c:2474 src/client.c:2490
 #, c-format
 msgid "Attempting connection to: %s... (%d/%d)"
 msgstr ""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dealers-choice-0.0.10/po/es_MX.po 
new/dealers-choice-0.0.11/po/es_MX.po
--- old/dealers-choice-0.0.10/po/es_MX.po       2026-03-30 16:22:05.000000000 
+0200
+++ new/dealers-choice-0.0.11/po/es_MX.po       2026-04-01 09:23:45.000000000 
+0200
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: dealers-choice\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-30 06:34-0500\n"
+"POT-Creation-Date: 2026-03-31 23:08-0500\n"
 "PO-Revision-Date: 2025-07-02 00:18-0500\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -41,56 +41,56 @@
 msgid "Waiting for dealer to select game..."
 msgstr ""
 
-#: src/client.c:188 src/client.c:1658
+#: src/client.c:188 src/client.c:1662
 msgid "Kick"
 msgstr ""
 
-#: src/client.c:190 src/client.c:1660
+#: src/client.c:190 src/client.c:1664
 msgid "Ban"
 msgstr ""
 
 #. Show dealing screen immediately after click
-#: src/client.c:515
+#: src/client.c:519
 msgid "Dealing..."
 msgstr ""
 
-#: src/client.c:1248
+#: src/client.c:1252
 msgid "Check"
 msgstr "Pasar"
 
-#: src/client.c:1248
+#: src/client.c:1252
 msgid "Bet"
 msgstr "Apostar"
 
-#: src/client.c:1249
+#: src/client.c:1253
 msgid "Fold"
 msgstr "Retirarse"
 
-#: src/client.c:1249
+#: src/client.c:1253
 msgid "Call"
 msgstr "Igualar"
 
-#: src/client.c:1250
+#: src/client.c:1254
 msgid "Raise"
 msgstr "Subir la apuesta"
 
-#: src/client.c:1250
+#: src/client.c:1254
 msgid "Discard"
 msgstr "Descartar"
 
-#: src/client.c:1251
+#: src/client.c:1255
 msgid "Exchange"
 msgstr ""
 
-#: src/client.c:1603
+#: src/client.c:1607
 msgid "Click a 2, then choose value and suit to assign."
 msgstr ""
 
-#: src/client.c:2461
+#: src/client.c:2467
 msgid "Cancel"
 msgstr ""
 
-#: src/client.c:2468 src/client.c:2484
+#: src/client.c:2474 src/client.c:2490
 #, c-format
 msgid "Attempting connection to: %s... (%d/%d)"
 msgstr ""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dealers-choice-0.0.10/po/fr.po 
new/dealers-choice-0.0.11/po/fr.po
--- old/dealers-choice-0.0.10/po/fr.po  2026-03-30 16:22:05.000000000 +0200
+++ new/dealers-choice-0.0.11/po/fr.po  2026-04-01 09:23:45.000000000 +0200
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: dealers-choice\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-30 06:34-0500\n"
+"POT-Creation-Date: 2026-03-31 23:08-0500\n"
 "PO-Revision-Date: 2025-07-02 00:18-0500\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -41,56 +41,56 @@
 msgid "Waiting for dealer to select game..."
 msgstr ""
 
-#: src/client.c:188 src/client.c:1658
+#: src/client.c:188 src/client.c:1662
 msgid "Kick"
 msgstr ""
 
-#: src/client.c:190 src/client.c:1660
+#: src/client.c:190 src/client.c:1664
 msgid "Ban"
 msgstr ""
 
 #. Show dealing screen immediately after click
-#: src/client.c:515
+#: src/client.c:519
 msgid "Dealing..."
 msgstr ""
 
-#: src/client.c:1248
+#: src/client.c:1252
 msgid "Check"
 msgstr "Parole"
 
-#: src/client.c:1248
+#: src/client.c:1252
 msgid "Bet"
 msgstr "Miser"
 
-#: src/client.c:1249
+#: src/client.c:1253
 msgid "Fold"
 msgstr "Se coucher"
 
-#: src/client.c:1249
+#: src/client.c:1253
 msgid "Call"
 msgstr "Suivre"
 
-#: src/client.c:1250
+#: src/client.c:1254
 msgid "Raise"
 msgstr "Relancer"
 
-#: src/client.c:1250
+#: src/client.c:1254
 msgid "Discard"
 msgstr "Défausser"
 
-#: src/client.c:1251
+#: src/client.c:1255
 msgid "Exchange"
 msgstr ""
 
-#: src/client.c:1603
+#: src/client.c:1607
 msgid "Click a 2, then choose value and suit to assign."
 msgstr ""
 
-#: src/client.c:2461
+#: src/client.c:2467
 msgid "Cancel"
 msgstr ""
 
-#: src/client.c:2468 src/client.c:2484
+#: src/client.c:2474 src/client.c:2490
 #, c-format
 msgid "Attempting connection to: %s... (%d/%d)"
 msgstr ""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dealers-choice-0.0.10/po/it.po 
new/dealers-choice-0.0.11/po/it.po
--- old/dealers-choice-0.0.10/po/it.po  2026-03-30 16:22:05.000000000 +0200
+++ new/dealers-choice-0.0.11/po/it.po  2026-04-01 09:23:45.000000000 +0200
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: dealers-choice\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-30 06:34-0500\n"
+"POT-Creation-Date: 2026-03-31 23:08-0500\n"
 "PO-Revision-Date: 2025-07-02 00:46-0500\n"
 "Last-Translator: Andy <[email protected]>\n"
 "Language-Team: Italian <[email protected]>\n"
@@ -41,56 +41,56 @@
 msgid "Waiting for dealer to select game..."
 msgstr ""
 
-#: src/client.c:188 src/client.c:1658
+#: src/client.c:188 src/client.c:1662
 msgid "Kick"
 msgstr ""
 
-#: src/client.c:190 src/client.c:1660
+#: src/client.c:190 src/client.c:1664
 msgid "Ban"
 msgstr ""
 
 #. Show dealing screen immediately after click
-#: src/client.c:515
+#: src/client.c:519
 msgid "Dealing..."
 msgstr ""
 
-#: src/client.c:1248
+#: src/client.c:1252
 msgid "Check"
 msgstr "Check"
 
-#: src/client.c:1248
+#: src/client.c:1252
 msgid "Bet"
 msgstr "Punta"
 
-#: src/client.c:1249
+#: src/client.c:1253
 msgid "Fold"
 msgstr "Molla"
 
-#: src/client.c:1249
+#: src/client.c:1253
 msgid "Call"
 msgstr "Chiamata"
 
-#: src/client.c:1250
+#: src/client.c:1254
 msgid "Raise"
 msgstr "Rilancia"
 
-#: src/client.c:1250
+#: src/client.c:1254
 msgid "Discard"
 msgstr "Scarta"
 
-#: src/client.c:1251
+#: src/client.c:1255
 msgid "Exchange"
 msgstr ""
 
-#: src/client.c:1603
+#: src/client.c:1607
 msgid "Click a 2, then choose value and suit to assign."
 msgstr ""
 
-#: src/client.c:2461
+#: src/client.c:2467
 msgid "Cancel"
 msgstr ""
 
-#: src/client.c:2468 src/client.c:2484
+#: src/client.c:2474 src/client.c:2490
 #, c-format
 msgid "Attempting connection to: %s... (%d/%d)"
 msgstr ""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dealers-choice-0.0.10/po/ru.po 
new/dealers-choice-0.0.11/po/ru.po
--- old/dealers-choice-0.0.10/po/ru.po  2026-03-30 16:22:05.000000000 +0200
+++ new/dealers-choice-0.0.11/po/ru.po  2026-04-01 09:23:45.000000000 +0200
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: dealers-choice\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-30 06:34-0500\n"
+"POT-Creation-Date: 2026-03-31 23:08-0500\n"
 "PO-Revision-Date: 2025-07-02 00:18-0500\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -42,56 +42,56 @@
 msgid "Waiting for dealer to select game..."
 msgstr ""
 
-#: src/client.c:188 src/client.c:1658
+#: src/client.c:188 src/client.c:1662
 msgid "Kick"
 msgstr ""
 
-#: src/client.c:190 src/client.c:1660
+#: src/client.c:190 src/client.c:1664
 msgid "Ban"
 msgstr ""
 
 #. Show dealing screen immediately after click
-#: src/client.c:515
+#: src/client.c:519
 msgid "Dealing..."
 msgstr ""
 
-#: src/client.c:1248
+#: src/client.c:1252
 msgid "Check"
 msgstr "Чек"
 
-#: src/client.c:1248
+#: src/client.c:1252
 msgid "Bet"
 msgstr "Ставка"
 
-#: src/client.c:1249
+#: src/client.c:1253
 msgid "Fold"
 msgstr "Пас"
 
-#: src/client.c:1249
+#: src/client.c:1253
 msgid "Call"
 msgstr "Колл"
 
-#: src/client.c:1250
+#: src/client.c:1254
 msgid "Raise"
 msgstr "Рейз"
 
-#: src/client.c:1250
+#: src/client.c:1254
 msgid "Discard"
 msgstr "Сбросить"
 
-#: src/client.c:1251
+#: src/client.c:1255
 msgid "Exchange"
 msgstr ""
 
-#: src/client.c:1603
+#: src/client.c:1607
 msgid "Click a 2, then choose value and suit to assign."
 msgstr ""
 
-#: src/client.c:2461
+#: src/client.c:2467
 msgid "Cancel"
 msgstr ""
 
-#: src/client.c:2468 src/client.c:2484
+#: src/client.c:2474 src/client.c:2490
 #, c-format
 msgid "Attempting connection to: %s... (%d/%d)"
 msgstr ""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dealers-choice-0.0.10/po/sv.po 
new/dealers-choice-0.0.11/po/sv.po
--- old/dealers-choice-0.0.10/po/sv.po  2026-03-30 16:22:05.000000000 +0200
+++ new/dealers-choice-0.0.11/po/sv.po  2026-04-01 09:23:45.000000000 +0200
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: dealers-choice\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-30 06:34-0500\n"
+"POT-Creation-Date: 2026-03-31 23:08-0500\n"
 "PO-Revision-Date: 2026-03-08 15:06-0500\n"
 "Last-Translator: Andy <[email protected]>\n"
 "Language-Team: \n"
@@ -41,56 +41,56 @@
 msgid "Waiting for dealer to select game..."
 msgstr ""
 
-#: src/client.c:188 src/client.c:1658
+#: src/client.c:188 src/client.c:1662
 msgid "Kick"
 msgstr ""
 
-#: src/client.c:190 src/client.c:1660
+#: src/client.c:190 src/client.c:1664
 msgid "Ban"
 msgstr ""
 
 #. Show dealing screen immediately after click
-#: src/client.c:515
+#: src/client.c:519
 msgid "Dealing..."
 msgstr "Delar ut..."
 
-#: src/client.c:1248
+#: src/client.c:1252
 msgid "Check"
 msgstr "Passa"
 
-#: src/client.c:1248
+#: src/client.c:1252
 msgid "Bet"
 msgstr "Satsa"
 
-#: src/client.c:1249
+#: src/client.c:1253
 msgid "Fold"
 msgstr "Lägg dig"
 
-#: src/client.c:1249
+#: src/client.c:1253
 msgid "Call"
 msgstr "Syna"
 
-#: src/client.c:1250
+#: src/client.c:1254
 msgid "Raise"
 msgstr "Höj"
 
-#: src/client.c:1250
+#: src/client.c:1254
 msgid "Discard"
 msgstr "Kasta"
 
-#: src/client.c:1251
+#: src/client.c:1255
 msgid "Exchange"
 msgstr "Byt"
 
-#: src/client.c:1603
+#: src/client.c:1607
 msgid "Click a 2, then choose value and suit to assign."
 msgstr "Klicka på en tvåa och välj sedan valör och färg att tilldela."
 
-#: src/client.c:2461
+#: src/client.c:2467
 msgid "Cancel"
 msgstr ""
 
-#: src/client.c:2468 src/client.c:2484
+#: src/client.c:2474 src/client.c:2490
 #, c-format
 msgid "Attempting connection to: %s... (%d/%d)"
 msgstr ""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dealers-choice-0.0.10/po/uk.po 
new/dealers-choice-0.0.11/po/uk.po
--- old/dealers-choice-0.0.10/po/uk.po  2026-03-30 16:22:05.000000000 +0200
+++ new/dealers-choice-0.0.11/po/uk.po  2026-04-01 09:23:45.000000000 +0200
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: dealers-choice\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-30 06:34-0500\n"
+"POT-Creation-Date: 2026-03-31 23:08-0500\n"
 "PO-Revision-Date: 2025-07-02 00:18-0500\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -42,56 +42,56 @@
 msgid "Waiting for dealer to select game..."
 msgstr ""
 
-#: src/client.c:188 src/client.c:1658
+#: src/client.c:188 src/client.c:1662
 msgid "Kick"
 msgstr ""
 
-#: src/client.c:190 src/client.c:1660
+#: src/client.c:190 src/client.c:1664
 msgid "Ban"
 msgstr ""
 
 #. Show dealing screen immediately after click
-#: src/client.c:515
+#: src/client.c:519
 msgid "Dealing..."
 msgstr ""
 
-#: src/client.c:1248
+#: src/client.c:1252
 msgid "Check"
 msgstr "Чек"
 
-#: src/client.c:1248
+#: src/client.c:1252
 msgid "Bet"
 msgstr "Ставка"
 
-#: src/client.c:1249
+#: src/client.c:1253
 msgid "Fold"
 msgstr "Пас"
 
-#: src/client.c:1249
+#: src/client.c:1253
 msgid "Call"
 msgstr "Кол"
 
-#: src/client.c:1250
+#: src/client.c:1254
 msgid "Raise"
 msgstr "Рейз"
 
-#: src/client.c:1250
+#: src/client.c:1254
 msgid "Discard"
 msgstr "Скинути"
 
-#: src/client.c:1251
+#: src/client.c:1255
 msgid "Exchange"
 msgstr ""
 
-#: src/client.c:1603
+#: src/client.c:1607
 msgid "Click a 2, then choose value and suit to assign."
 msgstr ""
 
-#: src/client.c:2461
+#: src/client.c:2467
 msgid "Cancel"
 msgstr ""
 
-#: src/client.c:2468 src/client.c:2484
+#: src/client.c:2474 src/client.c:2490
 #, c-format
 msgid "Attempting connection to: %s... (%d/%d)"
 msgstr ""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dealers-choice-0.0.10/src/client.c 
new/dealers-choice-0.0.11/src/client.c
--- old/dealers-choice-0.0.10/src/client.c      2026-03-30 16:22:05.000000000 
+0200
+++ new/dealers-choice-0.0.11/src/client.c      2026-04-01 09:23:45.000000000 
+0200
@@ -2670,9 +2670,10 @@
     if (recv_status != RECV_SUCCESS)
       exit(EXIT_FAILURE);
 
+    bool went_back_result = false;
     SoundContext_t sound_context = {0};
+    sound_context.engineConfig = ma_engine_config_init();
     if (player_config->volume == 0 || cli_args->disable_audio) {
-      ma_engine_config_init();
       sound_context.engineConfig.noDevice = MA_TRUE;
       sound_context.engineConfig.channels = 2;
       sound_context.engineConfig.sampleRate = 48000;
@@ -2707,52 +2708,62 @@
     PathconfLimits_t limits;
     get_pathconf_limits(path->data, &limits);
     size_t i;
+    size_t n_sounds_init = 0;
+    size_t n_coin_sounds_init = 0;
     for (i = 0; i < SND_NUM_SOUNDS; i++) {
       char *snd_path = join_paths(limits.path_max, path->data, "sounds", 
sounds[i].filename);
-      if (ma_sound_init_from_file(&sound_context.engine, snd_path, 0, NULL, 
NULL,
-                                  &sounds[i].sound) != MA_SUCCESS) {
+      bool ok = ma_sound_init_from_file(&sound_context.engine, snd_path, 0, 
NULL, NULL,
+                                        &sounds[i].sound) == MA_SUCCESS;
+      free(snd_path);
+      if (!ok) {
         fprintf(stderr, "Failed to init sound %zd\n", i);
-        exit(EXIT_FAILURE);
+        goto cleanup_audio;
       }
-      free(snd_path);
+      n_sounds_init++;
     }
 
     for (i = 0; i < ARRAY_SIZE(coin_hit_sounds); i++) {
       char *snd_path =
           join_paths(limits.path_max, path->data, "sounds/coin", 
coin_hit_sounds[i].filename);
-      if (ma_sound_init_from_file(&sound_context.engine, snd_path, 0, NULL, 
NULL,
-                                  &coin_hit_sounds[i].sound) != MA_SUCCESS) {
+      bool ok = ma_sound_init_from_file(&sound_context.engine, snd_path, 0, 
NULL, NULL,
+                                        &coin_hit_sounds[i].sound) == 
MA_SUCCESS;
+      free(snd_path);
+      if (!ok) {
         fprintf(stderr, "Failed to init sound %zd\n", i);
-        exit(EXIT_FAILURE);
+        goto cleanup_audio;
       }
-      free(snd_path);
+      n_coin_sounds_init++;
     }
 
-    bool running = true;
-    bool went_back = false;
-    do {
-      EGameSelResult_t sel = handle_game_selection(
-          player_config, &socket_context, game_settings.client_id, 
&game_state, &client_state,
-          sdl_context, font, &sound_context, links, path);
-      if (sel == GAME_SEL_BACK) {
-        went_back = true;
-        break;
-      }
-      if (sel == GAME_SEL_ERROR)
-        break;
-
-      running = handle_game_logic(player_config, &socket_context, 
&game_settings, &game_state,
-                                  sdl_context, font, path, &sound_context);
-    } while (running);
-    for (i = 0; i < SND_NUM_SOUNDS; i++)
+    {
+      bool running = true;
+      bool went_back = false;
+      do {
+        EGameSelResult_t sel = handle_game_selection(
+            player_config, &socket_context, game_settings.client_id, 
&game_state, &client_state,
+            sdl_context, font, &sound_context, links, path);
+        if (sel == GAME_SEL_BACK) {
+          went_back = true;
+          break;
+        }
+        if (sel == GAME_SEL_ERROR)
+          break;
+
+        running = handle_game_logic(player_config, &socket_context, 
&game_settings, &game_state,
+                                    sdl_context, font, path, &sound_context);
+      } while (running);
+      went_back_result = went_back;
+    }
+cleanup_audio:
+    for (i = 0; i < n_sounds_init; i++)
       ma_sound_uninit(&sounds[i].sound);
-    for (i = 0; i < ARRAY_SIZE(coin_hit_sounds); i++)
+    for (i = 0; i < n_coin_sounds_init; i++)
       ma_sound_uninit(&coin_hit_sounds[i].sound);
     ma_engine_uninit(&sound_context.engine);
     socket_cleanup(&socket_context);
     SDLNet_Quit();
 
-    return went_back;
+    return went_back_result;
   } else {
     if (out_socket_context)
       *out_socket_context = socket_context;

Reply via email to