The submitted at github: 
https://github.com/libuv/libuv/issues/754

The code is modified, but the issue still exist.
New code:   add QUEUE_INIT(&w1.wq);  ....  QUEUE_INIT(&w4.wq);


#include "queue.h"
#include <stdio.h>

struct uv__work {
  int id;
  void* wq[2];
};

#define QUEUE_DATA(ptr, type, field) \
  ((type *) ((char *) (ptr) - offsetof(type, field)))


static QUEUE wq;

int main()
{
    struct uv__work *pw;
    QUEUE* q;

    QUEUE_INIT(&wq);
    
    struct uv__work  w1;
    w1.id = 1;
    QUEUE_INIT(&w1.wq);
    QUEUE_INSERT_TAIL(&wq, &w1.wq);
        
    struct uv__work w2;
    w2.id = 2;
    QUEUE_INIT(&w2.wq);
    QUEUE_INSERT_TAIL(&wq, &w2.wq);

    struct uv__work w3;
    w3.id = 3;
    QUEUE_INIT(&w3.wq);
    QUEUE_INSERT_TAIL(&wq, &w3.wq);


    QUEUE_FOREACH(q, &wq)
    {
        pw = QUEUE_DATA(q, uv__work, wq);
        printf("queue wq data is %d.\n", pw->id);
    }
    printf("-----------------------------\n");

    QUEUE wq2;
    QUEUE_INIT(&wq2);

    struct uv__work w4;
    w4.id = 4;
    QUEUE_INIT(&w4.wq);
    QUEUE_INSERT_TAIL(&wq2, &w4.wq);

    QUEUE_FOREACH(q, &wq2)
    {
        pw = QUEUE_DATA(q, uv__work, wq);
        printf("queue wq2 data is %d.\n", pw->id);
    }
    printf("-----------------------------\n");


    QUEUE_ADD(&wq, &wq2); // add

    QUEUE_FOREACH(q, &wq)
    {
        pw = QUEUE_DATA(q, uv__work, wq);
        printf("queue wq data is %d.\n", pw->id);
    }
    printf("-----------------------------\n");

    QUEUE_FOREACH(q, &wq2)
    {
        pw = QUEUE_DATA(q, uv__work, wq);
        printf("queue wq2 data is %d.\n", pw->id);
    }
    printf("-----------------------------\n");

    return 0;
}




-- 
You received this message because you are subscribed to the Google Groups 
"libuv" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/libuv.
For more options, visit https://groups.google.com/d/optout.

Reply via email to