in quark.go [173:208]
func OpenQueue(attr QueueAttr, slots int) (*Queue, error) {
var queue Queue
p, err := C.calloc(C.size_t(1), C.sizeof_struct_quark_queue)
if p == nil {
return nil, wrapErrno(err)
}
queue.quarkQueue = (*C.struct_quark_queue)(p)
p = nil
cattr := C.struct_quark_queue_attr{
flags: C.int(attr.Flags),
max_length: C.int(attr.MaxLength),
cache_grace_time: C.int(attr.CacheGraceTime),
hold_time: C.int(attr.HoldTime),
}
ok, err := C.quark_queue_open(queue.quarkQueue, &cattr)
if ok == -1 {
C.free(unsafe.Pointer(queue.quarkQueue))
return nil, wrapErrno(err)
}
p, err = C.calloc(C.size_t(slots), C.sizeof_struct_quark_event)
if p == nil {
C.quark_queue_close(queue.quarkQueue)
C.free(unsafe.Pointer(queue.quarkQueue))
return nil, wrapErrno(err)
}
queue.cEvents = (*C.struct_quark_event)(p)
queue.numCevents = slots
p = nil
queue.epollFd = int(C.quark_queue_get_epollfd(queue.quarkQueue))
return &queue, nil
}