Diff for /libelwix/src/ring.c between versions 1.2 and 1.3

version 1.2, 2025/09/26 10:16:59 version 1.3, 2025/09/26 16:01:58
Line 59  rbuf_init(ringbuf_t *rbuf, int num) Line 59  rbuf_init(ringbuf_t *rbuf, int num)
         if (!rbuf)          if (!rbuf)
                 return -1;                  return -1;
   
        atomic_store_explicit(&rbuf->rb_head, 0, memory_order_relaxed);        atomic_store_explicit((atomic_int*) &rbuf->rb_head, 0, memory_order_relaxed);
        atomic_store_explicit(&rbuf->rb_tail, 0, memory_order_relaxed);        atomic_store_explicit((atomic_int*) &rbuf->rb_tail, 0, memory_order_relaxed);
   
         rbuf->rb_buffer = e_calloc(num, sizeof(struct iovec));          rbuf->rb_buffer = e_calloc(num, sizeof(struct iovec));
         if (!rbuf->rb_buffer)          if (!rbuf->rb_buffer)
Line 90  rbuf_free(ringbuf_t *rbuf) Line 90  rbuf_free(ringbuf_t *rbuf)
                 rbuf->rb_bufnum = 0;                  rbuf->rb_bufnum = 0;
         }          }
   
        atomic_store_explicit(&rbuf->rb_head, 0, memory_order_relaxed);        atomic_store_explicit((atomic_int*) &rbuf->rb_head, 0, memory_order_relaxed);
        atomic_store_explicit(&rbuf->rb_tail, 0, memory_order_relaxed);        atomic_store_explicit((atomic_int*) &rbuf->rb_tail, 0, memory_order_relaxed);
 }  }
   
 /*  /*
Line 109  rbuf_purge(ringbuf_t *rbuf) Line 109  rbuf_purge(ringbuf_t *rbuf)
         if (rbuf->rb_buffer)          if (rbuf->rb_buffer)
                 memset(rbuf->rb_buffer, 0, rbuf->rb_bufnum * sizeof(struct iovec));                  memset(rbuf->rb_buffer, 0, rbuf->rb_bufnum * sizeof(struct iovec));
   
        atomic_store_explicit(&rbuf->rb_head, 0, memory_order_relaxed);        atomic_store_explicit((atomic_int*) &rbuf->rb_head, 0, memory_order_relaxed);
        atomic_store_explicit(&rbuf->rb_tail, 0, memory_order_relaxed);        atomic_store_explicit((atomic_int*) &rbuf->rb_tail, 0, memory_order_relaxed);
 }  }
   
 /*  /*
Line 125  rbuf_isempty(ringbuf_t *rbuf) Line 125  rbuf_isempty(ringbuf_t *rbuf)
         if (!rbuf)          if (!rbuf)
                 return -1;                  return -1;
   
        return (atomic_load_explicit(&rbuf->rb_head, memory_order_acquire) ==        return (atomic_load_explicit((atomic_int*) &rbuf->rb_head, memory_order_acquire) ==
                atomic_load_explicit(&rbuf->rb_tail, memory_order_acquire));                atomic_load_explicit((atomic_int*) &rbuf->rb_tail, memory_order_acquire));
 }  }
   
 /*  /*
Line 143  rbuf_isfull(ringbuf_t *rbuf) Line 143  rbuf_isfull(ringbuf_t *rbuf)
         if (!rbuf->rb_bufnum)          if (!rbuf->rb_bufnum)
                 return 1;                  return 1;
   
        return (((atomic_load_explicit(&rbuf->rb_head, memory_order_relaxed) + 1) % rbuf->rb_bufnum) ==        return (((atomic_load_explicit((atomic_int*) &rbuf->rb_head, memory_order_relaxed) + 1) % rbuf->rb_bufnum) ==
                atomic_load_explicit(&rbuf->rb_tail, memory_order_acquire));                atomic_load_explicit((atomic_int*) &rbuf->rb_tail, memory_order_acquire));
 }  }
   
 /*  /*
Line 166  rbuf_enqueue(ringbuf_t *rbuf, void *data, size_t len) Line 166  rbuf_enqueue(ringbuf_t *rbuf, void *data, size_t len)
         if (!rbuf->rb_bufnum)          if (!rbuf->rb_bufnum)
                 return 1;                  return 1;
   
        h = atomic_load_explicit(&rbuf->rb_head, memory_order_relaxed);        h = atomic_load_explicit((atomic_int*) &rbuf->rb_head, memory_order_relaxed);
        t = atomic_load_explicit(&rbuf->rb_tail, memory_order_acquire);        t = atomic_load_explicit((atomic_int*) &rbuf->rb_tail, memory_order_acquire);
         n = (h + 1) % rbuf->rb_bufnum;          n = (h + 1) % rbuf->rb_bufnum;
   
         if (n == t)          if (n == t)
Line 177  rbuf_enqueue(ringbuf_t *rbuf, void *data, size_t len) Line 177  rbuf_enqueue(ringbuf_t *rbuf, void *data, size_t len)
         iov->iov_len = len;          iov->iov_len = len;
         iov->iov_base = data;          iov->iov_base = data;
   
        atomic_store_explicit(&rbuf->rb_head, n, memory_order_release);        atomic_store_explicit((atomic_int*) &rbuf->rb_head, n, memory_order_release);
         return 0;          return 0;
 }  }
   
Line 198  rbuf_dequeue(ringbuf_t *rbuf, struct iovec *out) Line 198  rbuf_dequeue(ringbuf_t *rbuf, struct iovec *out)
         if (!rbuf->rb_bufnum)          if (!rbuf->rb_bufnum)
                 return 1;                  return 1;
   
        h = atomic_load_explicit(&rbuf->rb_head, memory_order_acquire);        h = atomic_load_explicit((atomic_int*) &rbuf->rb_head, memory_order_acquire);
        t = atomic_load_explicit(&rbuf->rb_tail, memory_order_relaxed);        t = atomic_load_explicit((atomic_int*) &rbuf->rb_tail, memory_order_relaxed);
         n = (t + 1) % rbuf->rb_bufnum;          n = (t + 1) % rbuf->rb_bufnum;
   
         if (h == t)          if (h == t)
Line 208  rbuf_dequeue(ringbuf_t *rbuf, struct iovec *out) Line 208  rbuf_dequeue(ringbuf_t *rbuf, struct iovec *out)
         if (out)          if (out)
                 *out = rbuf->rb_buffer[t];                  *out = rbuf->rb_buffer[t];
   
        atomic_store_explicit(&rbuf->rb_tail, n, memory_order_release);        atomic_store_explicit((atomic_int*) &rbuf->rb_tail, n, memory_order_release);
         return 0;          return 0;
 }  }

Removed from v.1.2  
changed lines
  Added in v.1.3


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>