aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main.c4
-rw-r--r--src/player.c2
-rw-r--r--src/playerData.c5
3 files changed, 8 insertions, 3 deletions
diff --git a/src/main.c b/src/main.c
index 43311b3a7..6c175fbd7 100644
--- a/src/main.c
+++ b/src/main.c
@@ -477,14 +477,13 @@ int main(int argc, char *argv[])
playerKill();
freeAllInterfaces();
closeAllListenSockets();
+ finishPlaylist();
start = clock();
closeMp3Directory();
DEBUG("closeMp3Directory took %f seconds\n",
((float)(clock()-start))/CLOCKS_PER_SEC);
- finishPlaylist();
- freePlayerData();
finishNormalization();
finishAudioDriver();
finishAudioConfig();
@@ -495,6 +494,7 @@ int main(int argc, char *argv[])
finishInputPlugins();
cleanUpPidFile();
finishConf();
+ freePlayerData();
close_log_files();
return EXIT_SUCCESS;
diff --git a/src/player.c b/src/player.c
index 527e28aff..c24424c44 100644
--- a/src/player.c
+++ b/src/player.c
@@ -124,8 +124,8 @@ int playerInit(void)
closeAllListenSockets();
freeAllInterfaces();
- closeMp3Directory();
finishPlaylist();
+ closeMp3Directory();
finishPermissions();
finishCommands();
finishVolume();
diff --git a/src/playerData.c b/src/playerData.c
index df928acc4..3feb46e45 100644
--- a/src/playerData.c
+++ b/src/playerData.c
@@ -21,6 +21,7 @@
#include "log.h"
#include <sys/types.h>
+#include <sys/wait.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
@@ -164,5 +165,9 @@ PlayerData *getPlayerData(void)
void freePlayerData(void)
{
+ /* We don't want to release this memory until we know our player and
+ * decoder have exited. Otherwise, their signal handlers will want to
+ * access playerData_pd and we need to keep it available for them */
+ waitpid(-1, NULL, 0);
shmdt(playerData_pd);
}