aboutsummaryrefslogtreecommitdiffstats
path: root/src/ft_exit.c
diff options
context:
space:
mode:
authorJozanLeClerc <bousset.rudy@gmail.com>2020-03-16 19:41:26 +0100
committerJozanLeClerc <bousset.rudy@gmail.com>2020-03-16 19:41:26 +0100
commita8c9c04ec24a71f076891bdc1c26860db7c5c9c3 (patch)
treea5dc6905f6987c4d5fcd27276f7fc338f2af8f0b /src/ft_exit.c
parentCleaner memdels (diff)
parentMerge branch 'master' into back-to-pthread (diff)
download42-cub3d-a8c9c04ec24a71f076891bdc1c26860db7c5c9c3.tar.gz
42-cub3d-a8c9c04ec24a71f076891bdc1c26860db7c5c9c3.tar.bz2
42-cub3d-a8c9c04ec24a71f076891bdc1c26860db7c5c9c3.tar.xz
42-cub3d-a8c9c04ec24a71f076891bdc1c26860db7c5c9c3.tar.zst
42-cub3d-a8c9c04ec24a71f076891bdc1c26860db7c5c9c3.zip
Merge branch 'back-to-pthread'
Diffstat (limited to 'src/ft_exit.c')
-rw-r--r--src/ft_exit.c58
1 files changed, 30 insertions, 28 deletions
diff --git a/src/ft_exit.c b/src/ft_exit.c
index 2e997fb..61f925e 100644
--- a/src/ft_exit.c
+++ b/src/ft_exit.c
@@ -15,10 +15,8 @@
#include <mlx.h>
#include <stddef.h>
#include <stdlib.h>
-#include <signal.h>
-#include <sys/types.h>
-#include <sys/wait.h>
#include <stdint.h>
+#include <pthread.h>
static void
ft_free_some_extras(t_cub *clist)
@@ -53,12 +51,13 @@ static void
ft_memdel((void*)&clist->mlist.music_cmd);
ft_memdel((void*)&clist->mlist.mapl);
ft_free_words(clist->mlist.map);
- ft_free_words(clist->mlist.mcmd_words);
- ft_free_words(clist->sfx.death);
- ft_free_words(clist->sfx.pain_one);
- ft_free_words(clist->sfx.pain_two);
- ft_free_words(clist->sfx.new_lvl);
- ft_free_words(clist->sfx.trap);
+ ft_memdel((void*)&clist->sfx.death);
+ ft_memdel((void*)&clist->sfx.footstep_one);
+ ft_memdel((void*)&clist->sfx.footstep_two);
+ ft_memdel((void*)&clist->sfx.new_lvl);
+ ft_memdel((void*)&clist->sfx.pain_one);
+ ft_memdel((void*)&clist->sfx.pain_two);
+ ft_memdel((void*)&clist->sfx.trap);
ft_free_sprites(clist->mlist.sprite_path);
if (!clist->wlist.inited)
ft_memdel((void*)&clist->wlist.winptr);
@@ -89,25 +88,28 @@ static void
}
static void
- ft_kill_forks(t_cub *clist)
+ ft_cancel_threads(t_cub *clist)
{
- pid_t tmp;
-
- if (!(tmp = waitpid(clist->mpid, NULL, WNOHANG)))
- kill(clist->mpid, SIGTERM);
- wait(&clist->mpid);
- if (!(tmp = waitpid(clist->sfx.death_pid, NULL, WNOHANG)))
- kill(clist->sfx.death_pid, SIGTERM);
- wait(&clist->sfx.death_pid);
- if (!(tmp = waitpid(clist->sfx.new_lvl_pid, NULL, WNOHANG)))
- kill(clist->sfx.new_lvl_pid, SIGTERM);
- wait(&clist->sfx.new_lvl_pid);
- if (!(tmp = waitpid(clist->sfx.pain_pid, NULL, WNOHANG)))
- kill(clist->sfx.pain_pid, SIGTERM);
- wait(&clist->sfx.pain_pid);
- if (!(tmp = waitpid(clist->sfx.trap_pid, NULL, WNOHANG)))
- kill(clist->sfx.trap_pid, SIGTERM);
- wait(&clist->sfx.trap_pid);
+ if (clist->isoldmus && clist->wlist.inited)
+ {
+ pthread_cancel(clist->mtid);
+ pthread_join(clist->mtid, NULL);
+ }
+ pthread_mutex_unlock(&clist->sfx.death_mutex);
+ pthread_cancel(clist->sfx.death_tid);
+ pthread_join(clist->sfx.death_tid, NULL);
+ pthread_mutex_unlock(&clist->sfx.footstep_mutex);
+ pthread_cancel(clist->sfx.footstep_tid);
+ pthread_join(clist->sfx.footstep_tid, NULL);
+ pthread_mutex_unlock(&clist->sfx.new_lvl_mutex);
+ pthread_cancel(clist->sfx.new_lvl_tid);
+ pthread_join(clist->sfx.new_lvl_tid, NULL);
+ pthread_mutex_unlock(&clist->sfx.pain_mutex);
+ pthread_cancel(clist->sfx.pain_tid);
+ pthread_join(clist->sfx.pain_tid, NULL);
+ pthread_mutex_unlock(&clist->sfx.trap_mutex);
+ pthread_cancel(clist->sfx.trap_tid);
+ pthread_join(clist->sfx.trap_tid, NULL);
}
int
@@ -121,7 +123,7 @@ int
mlx_destroy_image(clist->wlist.wlx, clist->img.img);
mlx_destroy_window(clist->wlist.wlx, clist->wlist.winptr);
}
- ft_kill_forks(clist);
+ ft_cancel_threads(clist);
ft_free_lists(clist);
ft_free_some_extras(clist);
ft_printf("Exiting program\n");