netdev_dummy_create(const struct netdev_class *class, const char *name,
struct netdev **netdevp)
{
- static unsigned int next_n = 0xaa550000;
- static pthread_mutex_t mutex = PTHREAD_ADAPTIVE_MUTEX_INITIALIZER;
-
+ static atomic_uint next_n = ATOMIC_VAR_INIT(0xaa550000);
struct netdev_dummy *netdev;
unsigned int n;
- xpthread_mutex_lock(&mutex);
- n = next_n++;
- xpthread_mutex_unlock(&mutex);
-
+ atomic_add(&next_n, 1, &n);
netdev = xzalloc(sizeof *netdev);
netdev_init(&netdev->up, name, class);
netdev->hwaddr[0] = 0xaa;
{
struct netdev_rx_dummy *rx = netdev_rx_dummy_cast(rx_);
struct ofpbuf *packet;
- size_t packet_size;
+ int retval;
if (list_is_empty(&rx->recv_queue)) {
return -EAGAIN;
packet = ofpbuf_from_list(list_pop_front(&rx->recv_queue));
rx->recv_queue_len--;
- if (packet->size > size) {
- return -EMSGSIZE;
+ if (packet->size <= size) {
+ memcpy(buffer, packet->data, packet->size);
+ retval = packet->size;
+ } else {
+ retval = -EMSGSIZE;
}
- packet_size = packet->size;
-
- memcpy(buffer, packet->data, packet->size);
ofpbuf_delete(packet);
- return packet_size;
+ return retval;
}
static void