1 /* go-send-nb-big.c -- nonblocking send of something big on a channel.
3 Copyright 2009 The Go Authors. All rights reserved.
4 Use of this source code is governed by a BSD-style
5 license that can be found in the LICENSE file. */
12 __go_send_nonblocking_big (struct __go_channel
* channel
, const void *val
)
17 alloc_size
= ((channel
->element_size
+ sizeof (uint64_t) - 1)
20 int data
= __go_send_nonblocking_acquire (channel
);
21 if (data
!= SEND_NONBLOCKING_ACQUIRE_SPACE
)
22 return data
== SEND_NONBLOCKING_ACQUIRE_CLOSED
;
24 offset
= channel
->next_store
* alloc_size
;
25 __builtin_memcpy (&channel
->data
[offset
], val
, channel
->element_size
);
27 __go_send_release (channel
);