Auxiliar #7 Implementación de Mensajes

Pablo Jaramillo V. 24 Abr 202324/04/23 a las 20:15 hrs.2023-04-24 20:15:24

El auxiliar #7 será donde siempre. Veremos la herramienta de mensajes implementada con nThreads, con un ejemplo de uso y la implementación.

Material:

Como siempre se tiene disponible el video del año pasadoHAY UN ERROR EN LA GRABACIÓN. Lea más adelante para la corrección.

Durante la clase auxiliar se detectó un error en el código de nReceive. Actualicé el .zip de arriba con la solución correcta.

El error consta de la linea donde se asigna *msg:
nThread sender_th = nth_getFront(this_th->sendQueue);

*pth = sender_th ? sender_th : NULL;

void *msg = sender_th->msg;
Esto genera un SEGFAULT cuando nReceive despierta por caducación de su timeout, cuando esto sucede la queue de la cual se obtiene sender_th va a estar vacia, por lo que sender_th será NULL. Esto hace la condición in-line de la asignación de *pth redundante y hace caso omiso a que sucede en la asignación de *msg, se haría algo similar a *msg = (*NULL)->msg, lo que no es valido.

Una corrección valida sería la siguiente, donde se revisa si sendTask es NULL y si lo es entonces el menaje es NULL, y si no lo es entonces es el mensaje.

nThread sendTask= nth_getFront(thisTh->sendQueue);

if (pth!=NULL)

    *pth= sendTask;

void *msg= sendTask==NULL ? NULL : sendTask->send.msg;

Categoría Auxiliares
Última Modificación 27 Abr 202327/04/23 a las 17:39 hrs.2023-04-27 17:39:27
Vistas Únicas 66
Compartir
Comentarios
  • Sebastian Guzman

    5 May 202305/05/23 a las 19:07 hrs.2023-05-05 19:07:05

    Revisando el video, la función nReceive dice:
    *pth = sender_th;
    void *msg = sender_th ? sender_th->msg : NULL;

    Que es distinto a:
    *pth = sender_th ? sender_th : NULL;
    void *msg = sender_th->msg;

    Pero supongo que igual faltó el:
    if (pth!=NULL) *pth = sender_th;

  • Paula Cabrera G.

    28 Abr 202328/04/23 a las 16:23 hrs.2023-04-28 16:23:28

    :o gracias! Ahora si me hace sentido

  • Pablo Jaramillo V.

    27 Abr 202327/04/23 a las 17:37 hrs.2023-04-27 17:37:27

    Gracias a Paula por identificar el error :)