aboutsummaryrefslogtreecommitdiff
path: root/philo
diff options
context:
space:
mode:
authorDominik Kaiser2025-01-18 11:55:54 +0100
committerDominik Kaiser2025-01-18 11:55:54 +0100
commit19c377d018d7fc8d438bcce844e51c0c00e81974 (patch)
tree3859a33190e5b6ece4284f9b64b0de8392aff4e6 /philo
parentb351d6471aa7fda52a45ea8c93308eb91aec7f32 (diff)
downloadPhilosophers-19c377d018d7fc8d438bcce844e51c0c00e81974.tar.gz
Philosophers-19c377d018d7fc8d438bcce844e51c0c00e81974.zip
Add error handling
Diffstat (limited to 'philo')
-rw-r--r--philo/include/philo.h4
-rw-r--r--philo/src/main.c4
-rw-r--r--philo/src/simulation.c36
3 files changed, 37 insertions, 7 deletions
diff --git a/philo/include/philo.h b/philo/include/philo.h
index 26871b9..9566136 100644
--- a/philo/include/philo.h
+++ b/philo/include/philo.h
@@ -6,7 +6,7 @@
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/01/17 10:23:19 by dkaiser #+# #+# */
-/* Updated: 2025/01/18 11:22:15 by dkaiser ### ########.fr */
+/* Updated: 2025/01/18 11:36:45 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
@@ -49,6 +49,6 @@ typedef struct s_philo
t_phdata *data;
} t_philo;
-void run_simulation(int nbr_of_philos, t_philo *philos);
+int run_simulation(int nbr_of_philos, t_philo *philos);
#endif
diff --git a/philo/src/main.c b/philo/src/main.c
index ca339bb..1a07271 100644
--- a/philo/src/main.c
+++ b/philo/src/main.c
@@ -6,7 +6,7 @@
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/01/14 17:13:30 by dkaiser #+# #+# */
-/* Updated: 2025/01/18 11:33:45 by dkaiser ### ########.fr */
+/* Updated: 2025/01/18 11:36:33 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
@@ -78,7 +78,7 @@ int main(int argc, char *argv[])
result = init(&philos, &data);
if (result != EXIT_SUCCESS)
return (result);
- run_simulation(data.nbr_of_philos, philos);
+ result = run_simulation(data.nbr_of_philos, philos);
free(philos);
free(data.forks);
return (result);
diff --git a/philo/src/simulation.c b/philo/src/simulation.c
index a30c7d2..a64f833 100644
--- a/philo/src/simulation.c
+++ b/philo/src/simulation.c
@@ -6,21 +6,51 @@
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/01/17 14:38:04 by dkaiser #+# #+# */
-/* Updated: 2025/01/18 11:26:17 by dkaiser ### ########.fr */
+/* Updated: 2025/01/18 11:55:45 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
#include "philo.h"
+int *process_philo(__attribute__((unused)) void *arg)
+{
+ t_philo *philo;
+ int *result;
+
+ result = malloc(sizeof(int));
+ if (result == NULL)
+ return (NULL);
+ philo = (t_philo *)arg;
+ printf("Processing philo %d\n", philo->id);
+ *result = EXIT_SUCCESS;
+ return (result);
+}
-void run_simulation(int nbr_of_philos, __attribute__((unused))t_philo *philos)
+int run_simulation(int nbr_of_philos, t_philo *philos)
{
int i;
+ int result;
+ void *retval;
i = 0;
+ result = EXIT_SUCCESS;
while (i < nbr_of_philos)
{
- printf("Philo %d\n", i);
+ result = pthread_create(&(philos[i].thread), NULL, (void*) process_philo, &philos[i]);
+ if (result != 0)
+ break;
i++;
}
+ while (i--)
+ {
+ pthread_join(philos[i].thread, &retval);
+ if (retval == NULL)
+ result = ft_err(ERR_MALLOC);
+ else if (*(int *)retval != EXIT_SUCCESS)
+ {
+ result = *(int *)retval;
+ free(retval);
+ }
+ }
+ return (result);
}