Skip to content

Commit 256f842

Browse files
committed
Added documentation for serverside classes. Updated readme and diagrams
1 parent 8c8cbc1 commit 256f842

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+1346
-892
lines changed

README.md

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,33 @@
22

33
Este repositorio contiene la solución propuesta para la PoC detallada en la [consigna](./TP2_Threads_Enunciado.pdf).
44

5+
### Table of Contents
6+
7+
1. [Diagramas de hilos y queues](#Diagramas-de-hilos-y-queues)
8+
1. [Manejo de mensajes con los clientes](#Manejo-de-mensajes-con-los-clientes)
9+
2. [Servidor](#Servidor)
10+
2. [Queues](#Queues)
11+
3. [Tick system](#Tick-system)
12+
4. [Setup](#Setup)
13+
5. [Compilación](#Compilación)
14+
6. [Running multi client](#Running-multi-client)
15+
7. [Comparación outputs](#Comparación-outputs)
16+
8. [Supresión de flags de cppcheck](#Supresión-de-flags-de-cppcheck)
17+
9. [Refactor para la re-entrega](#Refactor-para-la-re-entrega)
18+
10. [Licencia](#Licencia)
19+
11. [Código fuente utilizado](#Código-fuente-utilizado)
20+
521
## Diagramas de hilos y queues
622

723
### Manejo de mensajes con los clientes
824

9-
Este diagrama refleja cómo se manejan los threads relacionados al envío y recepción de mensajes con un cliente, desde el thread main del server. Se ilustra un sólo cliente, nombrándolo con el sufijo "1", las interacciones serían las mismas con más clientes en sus respectivos threads. El cliente es single-threaded.
25+
Este diagrama refleja cómo se manejan los threads relacionados al envío y recepción de mensajes con un cliente, desde el thread del gameloop del server (apodado thread Engine).
26+
27+
Se ilustra un sólo cliente, nombrándolo con el sufijo "1", las interacciones serían las mismas con más clientes en sus respectivos threads. El cliente es single-threaded.
28+
29+
Vale aclarar que si bien el objeto ClientManager está instanciado en el thread Main, el thread Engine, por ser un thread, tiene acceso al stack, en particular al code segment donde las instrucciones de ClientManager residen, por lo que no representa un bloqueo del thread Engine el hecho de que el thread Main esté bloqueado en leer input del usuario
1030

11-
<img src="./docs/client_thread.png">
31+
<img src="./docs/client_threads.png">
1232

1333
### Servidor
1434

@@ -22,11 +42,11 @@ Todas las Queues utilizadas fueron del tipo unbounded, entendiendo que el sistem
2242

2343
Las queues de las ClientConnections son bloqueantes porque me interesa que esos threads no hagan busy wait.
2444

25-
Los pop de las queues con los que JazzJackrabbit2GameServer debe interactuar son no bloqueantes ya que no se quiere bloquear el gameloop. Sin embargo, los push de las mismas son bloqueantes.
45+
Los pop de las queues con los que GameServerEngine debe interactuar son no bloqueantes ya que no se quiere bloquear el gameloop. Sin embargo, los push de las mismas son bloqueantes.
2646

2747
## Tick system
2848

29-
Para el servidor se utiliza un "sistema de ticks", inspirado en el funcionamiento del engine Source by Valve.
49+
Para el motor del servidor se utiliza un "sistema de ticks", inspirado en el funcionamiento del engine Source by Valve.
3050

3151
Así como un frame es una actualización de la imagen gráfica que renderiza un motor gráfico. Un tick o "gameframe" es una actualización de la lógica/estado del juego.
3252

@@ -90,6 +110,20 @@ Comparar outputs:
90110

91111
En algunos headers (.h) puntuales se suprimió el warning `unusedStructMember` de cppcheck. Esta decisión fue tomada porque es un falso positivo, en todos los casos que sucede, es sólo en headers de clases sobre variables privadas que sí se usan dentro del código (en el .cpp).
92112

113+
## Refactor para la re-entrega
114+
115+
Se colocó lógica de sanitización de user input en las funciones main tanto del server como del cliente.
116+
117+
Donde se consideró necesario se utilizaron constantes de tipo static en lugar de member variables de una clase, para reducir la complejidad del constructor.
118+
119+
Se eliminó el thread de UserInput para ahora ejecutar esa lógica en el thread main del server directamente. Dejando la responsabilidad de correr el gameloop principal en un thread aparte a la nueva clase GameServerEngine. Ahora el manejo de threads de más alto nivel es responsabilidad del main thread del server, para tener una arquitectura más top-down.
120+
121+
Se refactorizó la lógica de prints y manejo de notificaciones a los clientes para que clases que no deban conocer de esa lógica, no la tengan. De esta manera, los roles de GameServerProtocol, GameServerEngine, Army y el game server mismo son más claros.
122+
123+
En diversas partes de la solución se reemplazó código custom por algoritmos de la STL para que el código sea más expresivo y estándar.
124+
125+
La función reaper ahora se ejecuta inmediatamente antes de la conexión de un nuevo cliente, y no en cada tick como era antes.
126+
93127
## Licencia
94128

95129
GPL v2
Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
1-
==00:00:00:00.000 297431== Memcheck, a memory error detector
2-
==00:00:00:00.000 297431== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
3-
==00:00:00:00.000 297431== Using Valgrind-3.20.0 and LibVEX; rerun with -h for copyright info
4-
==00:00:00:00.000 297431== Command: ./client 127.0.0.1 1501
5-
==00:00:00:00.000 297431== Parent PID: 297428
6-
==00:00:00:00.000 297431==
7-
==00:00:00:10.022 297431==
8-
==00:00:00:10.022 297431== FILE DESCRIPTORS: 5 open (3 std) at exit.
9-
==00:00:00:10.022 297431== Open file descriptor 63:
10-
==00:00:00:10.022 297431== <inherited from parent>
11-
==00:00:00:10.022 297431==
12-
==00:00:00:10.022 297431== Open file descriptor 3: /mnt/62EE36AFEE367B7D/Users/Gabriel/Desktop/University/2024/Taller de Programación 1/TPs/TP2 - Threads/threads-2024c1-gabrieldiem/casos/01_single_player_shoot_exit/__client_0_valgrind__
13-
==00:00:00:10.022 297431== <inherited from parent>
14-
==00:00:00:10.022 297431==
15-
==00:00:00:10.022 297431==
16-
==00:00:00:10.022 297431== HEAP SUMMARY:
17-
==00:00:00:10.022 297431== in use at exit: 0 bytes in 0 blocks
18-
==00:00:00:10.022 297431== total heap usage: 31 allocs, 31 frees, 92,590 bytes allocated
19-
==00:00:00:10.022 297431==
20-
==00:00:00:10.022 297431== All heap blocks were freed -- no leaks are possible
21-
==00:00:00:10.022 297431==
22-
==00:00:00:10.023 297431== For lists of detected and suppressed errors, rerun with: -s
23-
==00:00:00:10.023 297431== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
1+
==00:00:00:00.000 352570== Memcheck, a memory error detector
2+
==00:00:00:00.000 352570== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
3+
==00:00:00:00.000 352570== Using Valgrind-3.20.0 and LibVEX; rerun with -h for copyright info
4+
==00:00:00:00.000 352570== Command: ./client 127.0.0.1 1501
5+
==00:00:00:00.000 352570== Parent PID: 352567
6+
==00:00:00:00.000 352570==
7+
==00:00:00:10.022 352570==
8+
==00:00:00:10.022 352570== FILE DESCRIPTORS: 5 open (3 std) at exit.
9+
==00:00:00:10.022 352570== Open file descriptor 63:
10+
==00:00:00:10.022 352570== <inherited from parent>
11+
==00:00:00:10.022 352570==
12+
==00:00:00:10.022 352570== Open file descriptor 3: /mnt/62EE36AFEE367B7D/Users/Gabriel/Desktop/University/2024/Taller de Programación 1/TPs/TP2 - Threads/threads-2024c1-gabrieldiem/casos/01_single_player_shoot_exit/__client_0_valgrind__
13+
==00:00:00:10.022 352570== <inherited from parent>
14+
==00:00:00:10.022 352570==
15+
==00:00:00:10.022 352570==
16+
==00:00:00:10.022 352570== HEAP SUMMARY:
17+
==00:00:00:10.022 352570== in use at exit: 0 bytes in 0 blocks
18+
==00:00:00:10.022 352570== total heap usage: 31 allocs, 31 frees, 92,590 bytes allocated
19+
==00:00:00:10.022 352570==
20+
==00:00:00:10.022 352570== All heap blocks were freed -- no leaks are possible
21+
==00:00:00:10.022 352570==
22+
==00:00:00:10.023 352570== For lists of detected and suppressed errors, rerun with: -s
23+
==00:00:00:10.023 352570== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0 297428 10
1+
0 352567 10
Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
1-
==00:00:00:00.000 297402== Memcheck, a memory error detector
2-
==00:00:00:00.000 297402== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
3-
==00:00:00:00.000 297402== Using Valgrind-3.20.0 and LibVEX; rerun with -h for copyright info
4-
==00:00:00:00.000 297402== Command: ./server 1500
5-
==00:00:00:00.000 297402== Parent PID: 297400
6-
==00:00:00:00.000 297402==
7-
==00:00:00:10.625 297402==
8-
==00:00:00:10.625 297402== FILE DESCRIPTORS: 5 open (3 std) at exit.
9-
==00:00:00:10.625 297402== Open file descriptor 63:
10-
==00:00:00:10.625 297402== <inherited from parent>
11-
==00:00:00:10.625 297402==
12-
==00:00:00:10.625 297402== Open file descriptor 3: /mnt/62EE36AFEE367B7D/Users/Gabriel/Desktop/University/2024/Taller de Programación 1/TPs/TP2 - Threads/threads-2024c1-gabrieldiem/casos/01_single_player_shoot_exit/__server_valgrind__
13-
==00:00:00:10.625 297402== <inherited from parent>
14-
==00:00:00:10.625 297402==
15-
==00:00:00:10.625 297402==
16-
==00:00:00:10.625 297402== HEAP SUMMARY:
17-
==00:00:00:10.625 297402== in use at exit: 0 bytes in 0 blocks
18-
==00:00:00:10.625 297402== total heap usage: 163 allocs, 163 frees, 105,862 bytes allocated
19-
==00:00:00:10.625 297402==
20-
==00:00:00:10.625 297402== All heap blocks were freed -- no leaks are possible
21-
==00:00:00:10.626 297402==
22-
==00:00:00:10.626 297402== For lists of detected and suppressed errors, rerun with: -s
23-
==00:00:00:10.626 297402== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
1+
==00:00:00:00.000 352541== Memcheck, a memory error detector
2+
==00:00:00:00.000 352541== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
3+
==00:00:00:00.000 352541== Using Valgrind-3.20.0 and LibVEX; rerun with -h for copyright info
4+
==00:00:00:00.000 352541== Command: ./server 1500
5+
==00:00:00:00.000 352541== Parent PID: 352539
6+
==00:00:00:00.000 352541==
7+
==00:00:00:10.663 352541==
8+
==00:00:00:10.663 352541== FILE DESCRIPTORS: 5 open (3 std) at exit.
9+
==00:00:00:10.663 352541== Open file descriptor 63:
10+
==00:00:00:10.663 352541== <inherited from parent>
11+
==00:00:00:10.663 352541==
12+
==00:00:00:10.663 352541== Open file descriptor 3: /mnt/62EE36AFEE367B7D/Users/Gabriel/Desktop/University/2024/Taller de Programación 1/TPs/TP2 - Threads/threads-2024c1-gabrieldiem/casos/01_single_player_shoot_exit/__server_valgrind__
13+
==00:00:00:10.663 352541== <inherited from parent>
14+
==00:00:00:10.663 352541==
15+
==00:00:00:10.663 352541==
16+
==00:00:00:10.663 352541== HEAP SUMMARY:
17+
==00:00:00:10.663 352541== in use at exit: 0 bytes in 0 blocks
18+
==00:00:00:10.663 352541== total heap usage: 163 allocs, 163 frees, 105,862 bytes allocated
19+
==00:00:00:10.663 352541==
20+
==00:00:00:10.663 352541== All heap blocks were freed -- no leaks are possible
21+
==00:00:00:10.663 352541==
22+
==00:00:00:10.664 352541== For lists of detected and suppressed errors, rerun with: -s
23+
==00:00:00:10.664 352541== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
1-
==00:00:00:00.000 297577== Memcheck, a memory error detector
2-
==00:00:00:00.000 297577== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
3-
==00:00:00:00.000 297577== Using Valgrind-3.20.0 and LibVEX; rerun with -h for copyright info
4-
==00:00:00:00.000 297577== Command: ./client 127.0.0.1 1503
5-
==00:00:00:00.000 297577== Parent PID: 297574
6-
==00:00:00:00.000 297577==
7-
==00:00:00:08.932 297577==
8-
==00:00:00:08.933 297577== FILE DESCRIPTORS: 5 open (3 std) at exit.
9-
==00:00:00:08.933 297577== Open file descriptor 63:
10-
==00:00:00:08.933 297577== <inherited from parent>
11-
==00:00:00:08.933 297577==
12-
==00:00:00:08.933 297577== Open file descriptor 3: /mnt/62EE36AFEE367B7D/Users/Gabriel/Desktop/University/2024/Taller de Programación 1/TPs/TP2 - Threads/threads-2024c1-gabrieldiem/casos/02_single_player_shoot_read/__client_0_valgrind__
13-
==00:00:00:08.933 297577== <inherited from parent>
14-
==00:00:00:08.933 297577==
15-
==00:00:00:08.933 297577==
16-
==00:00:00:08.933 297577== HEAP SUMMARY:
17-
==00:00:00:08.933 297577== in use at exit: 0 bytes in 0 blocks
18-
==00:00:00:08.933 297577== total heap usage: 64 allocs, 64 frees, 97,746 bytes allocated
19-
==00:00:00:08.933 297577==
20-
==00:00:00:08.933 297577== All heap blocks were freed -- no leaks are possible
21-
==00:00:00:08.933 297577==
22-
==00:00:00:08.933 297577== For lists of detected and suppressed errors, rerun with: -s
23-
==00:00:00:08.933 297577== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
1+
==00:00:00:00.000 352715== Memcheck, a memory error detector
2+
==00:00:00:00.000 352715== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
3+
==00:00:00:00.000 352715== Using Valgrind-3.20.0 and LibVEX; rerun with -h for copyright info
4+
==00:00:00:00.000 352715== Command: ./client 127.0.0.1 1503
5+
==00:00:00:00.000 352715== Parent PID: 352712
6+
==00:00:00:00.000 352715==
7+
==00:00:00:08.914 352715==
8+
==00:00:00:08.914 352715== FILE DESCRIPTORS: 5 open (3 std) at exit.
9+
==00:00:00:08.914 352715== Open file descriptor 63:
10+
==00:00:00:08.914 352715== <inherited from parent>
11+
==00:00:00:08.914 352715==
12+
==00:00:00:08.914 352715== Open file descriptor 3: /mnt/62EE36AFEE367B7D/Users/Gabriel/Desktop/University/2024/Taller de Programación 1/TPs/TP2 - Threads/threads-2024c1-gabrieldiem/casos/02_single_player_shoot_read/__client_0_valgrind__
13+
==00:00:00:08.914 352715== <inherited from parent>
14+
==00:00:00:08.914 352715==
15+
==00:00:00:08.914 352715==
16+
==00:00:00:08.914 352715== HEAP SUMMARY:
17+
==00:00:00:08.914 352715== in use at exit: 0 bytes in 0 blocks
18+
==00:00:00:08.914 352715== total heap usage: 64 allocs, 64 frees, 97,746 bytes allocated
19+
==00:00:00:08.914 352715==
20+
==00:00:00:08.914 352715== All heap blocks were freed -- no leaks are possible
21+
==00:00:00:08.914 352715==
22+
==00:00:00:08.914 352715== For lists of detected and suppressed errors, rerun with: -s
23+
==00:00:00:08.914 352715== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0 297574 10
1+
0 352712 10
Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
1-
==00:00:00:00.000 297538== Memcheck, a memory error detector
2-
==00:00:00:00.000 297538== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
3-
==00:00:00:00.000 297538== Using Valgrind-3.20.0 and LibVEX; rerun with -h for copyright info
4-
==00:00:00:00.000 297538== Command: ./server 1502
5-
==00:00:00:00.000 297538== Parent PID: 297536
6-
==00:00:00:00.000 297538==
7-
==00:00:00:09.665 297538==
8-
==00:00:00:09.665 297538== FILE DESCRIPTORS: 5 open (3 std) at exit.
9-
==00:00:00:09.665 297538== Open file descriptor 63:
10-
==00:00:00:09.666 297538== <inherited from parent>
11-
==00:00:00:09.666 297538==
12-
==00:00:00:09.666 297538== Open file descriptor 3: /mnt/62EE36AFEE367B7D/Users/Gabriel/Desktop/University/2024/Taller de Programación 1/TPs/TP2 - Threads/threads-2024c1-gabrieldiem/casos/02_single_player_shoot_read/__server_valgrind__
13-
==00:00:00:09.666 297538== <inherited from parent>
14-
==00:00:00:09.666 297538==
15-
==00:00:00:09.666 297538==
16-
==00:00:00:09.666 297538== HEAP SUMMARY:
17-
==00:00:00:09.666 297538== in use at exit: 0 bytes in 0 blocks
18-
==00:00:00:09.666 297538== total heap usage: 163 allocs, 163 frees, 105,862 bytes allocated
19-
==00:00:00:09.666 297538==
20-
==00:00:00:09.666 297538== All heap blocks were freed -- no leaks are possible
21-
==00:00:00:09.666 297538==
22-
==00:00:00:09.666 297538== For lists of detected and suppressed errors, rerun with: -s
23-
==00:00:00:09.666 297538== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
1+
==00:00:00:00.000 352681== Memcheck, a memory error detector
2+
==00:00:00:00.000 352681== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
3+
==00:00:00:00.000 352681== Using Valgrind-3.20.0 and LibVEX; rerun with -h for copyright info
4+
==00:00:00:00.000 352681== Command: ./server 1502
5+
==00:00:00:00.000 352681== Parent PID: 352679
6+
==00:00:00:00.000 352681==
7+
==00:00:00:09.852 352681==
8+
==00:00:00:09.852 352681== FILE DESCRIPTORS: 5 open (3 std) at exit.
9+
==00:00:00:09.852 352681== Open file descriptor 63:
10+
==00:00:00:09.852 352681== <inherited from parent>
11+
==00:00:00:09.852 352681==
12+
==00:00:00:09.852 352681== Open file descriptor 3: /mnt/62EE36AFEE367B7D/Users/Gabriel/Desktop/University/2024/Taller de Programación 1/TPs/TP2 - Threads/threads-2024c1-gabrieldiem/casos/02_single_player_shoot_read/__server_valgrind__
13+
==00:00:00:09.852 352681== <inherited from parent>
14+
==00:00:00:09.852 352681==
15+
==00:00:00:09.852 352681==
16+
==00:00:00:09.852 352681== HEAP SUMMARY:
17+
==00:00:00:09.852 352681== in use at exit: 0 bytes in 0 blocks
18+
==00:00:00:09.852 352681== total heap usage: 163 allocs, 163 frees, 105,862 bytes allocated
19+
==00:00:00:09.852 352681==
20+
==00:00:00:09.853 352681== All heap blocks were freed -- no leaks are possible
21+
==00:00:00:09.853 352681==
22+
==00:00:00:09.853 352681== For lists of detected and suppressed errors, rerun with: -s
23+
==00:00:00:09.853 352681== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
1-
==00:00:00:00.000 297702== Memcheck, a memory error detector
2-
==00:00:00:00.000 297702== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
3-
==00:00:00:00.000 297702== Using Valgrind-3.20.0 and LibVEX; rerun with -h for copyright info
4-
==00:00:00:00.000 297702== Command: ./client 127.0.0.1 1505
5-
==00:00:00:00.000 297702== Parent PID: 297699
6-
==00:00:00:00.000 297702==
7-
==00:00:00:22.127 297702==
8-
==00:00:00:22.127 297702== FILE DESCRIPTORS: 5 open (3 std) at exit.
9-
==00:00:00:22.127 297702== Open file descriptor 63:
10-
==00:00:00:22.127 297702== <inherited from parent>
11-
==00:00:00:22.127 297702==
12-
==00:00:00:22.127 297702== Open file descriptor 3: /mnt/62EE36AFEE367B7D/Users/Gabriel/Desktop/University/2024/Taller de Programación 1/TPs/TP2 - Threads/threads-2024c1-gabrieldiem/casos/03_three_players_all_read_once/__client_0_valgrind__
13-
==00:00:00:22.127 297702== <inherited from parent>
14-
==00:00:00:22.127 297702==
15-
==00:00:00:22.127 297702==
16-
==00:00:00:22.127 297702== HEAP SUMMARY:
17-
==00:00:00:22.127 297702== in use at exit: 0 bytes in 0 blocks
18-
==00:00:00:22.127 297702== total heap usage: 47 allocs, 47 frees, 97,202 bytes allocated
19-
==00:00:00:22.127 297702==
20-
==00:00:00:22.127 297702== All heap blocks were freed -- no leaks are possible
21-
==00:00:00:22.127 297702==
22-
==00:00:00:22.127 297702== For lists of detected and suppressed errors, rerun with: -s
23-
==00:00:00:22.127 297702== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
1+
==00:00:00:00.000 352921== Memcheck, a memory error detector
2+
==00:00:00:00.000 352921== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
3+
==00:00:00:00.000 352921== Using Valgrind-3.20.0 and LibVEX; rerun with -h for copyright info
4+
==00:00:00:00.000 352921== Command: ./client 127.0.0.1 1505
5+
==00:00:00:00.000 352921== Parent PID: 352918
6+
==00:00:00:00.000 352921==
7+
==00:00:00:22.125 352921==
8+
==00:00:00:22.125 352921== FILE DESCRIPTORS: 5 open (3 std) at exit.
9+
==00:00:00:22.125 352921== Open file descriptor 63:
10+
==00:00:00:22.125 352921== <inherited from parent>
11+
==00:00:00:22.125 352921==
12+
==00:00:00:22.125 352921== Open file descriptor 3: /mnt/62EE36AFEE367B7D/Users/Gabriel/Desktop/University/2024/Taller de Programación 1/TPs/TP2 - Threads/threads-2024c1-gabrieldiem/casos/03_three_players_all_read_once/__client_0_valgrind__
13+
==00:00:00:22.125 352921== <inherited from parent>
14+
==00:00:00:22.125 352921==
15+
==00:00:00:22.125 352921==
16+
==00:00:00:22.125 352921== HEAP SUMMARY:
17+
==00:00:00:22.125 352921== in use at exit: 0 bytes in 0 blocks
18+
==00:00:00:22.125 352921== total heap usage: 47 allocs, 47 frees, 97,202 bytes allocated
19+
==00:00:00:22.125 352921==
20+
==00:00:00:22.125 352921== All heap blocks were freed -- no leaks are possible
21+
==00:00:00:22.125 352921==
22+
==00:00:00:22.125 352921== For lists of detected and suppressed errors, rerun with: -s
23+
==00:00:00:22.125 352921== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

0 commit comments

Comments
 (0)