]> git.dkaiser.de - 42/Philosophers.git/commitdiff
Add error handling
authorDominik Kaiser <dkaiser@student.42heilbronn.de>
Sat, 18 Jan 2025 10:55:54 +0000 (11:55 +0100)
committerDominik Kaiser <dkaiser@student.42heilbronn.de>
Sat, 18 Jan 2025 10:55:54 +0000 (11:55 +0100)
philo/include/philo.h
philo/src/main.c
philo/src/simulation.c

index 26871b9b1478e616d02bdfabff09db780cd5b26b..9566136310925db9a59d898d9a0df9e9fd52b505 100644 (file)
@@ -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
index ca339bbd80ebedc95e6dced9c705a55a8ec3fa63..1a07271972002df91c9c610c01722111fa8a526d 100644 (file)
@@ -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);
index a30c7d292cb4d991549cee8e8d41c279aed689bd..a64f833fcf125d9fd3bf1ed67f1661b2672449b1 100644 (file)
@@ -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);
 }