Sha256: edeac162ef76860d6ec1ceea7fa8d3ec18213bc211d6ae286360c196835d9177

Contents?: true

Size: 1.11 KB

Versions: 2

Compression:

Stored size: 1.11 KB

Contents

#include "um.h"
#include <stdlib.h>

VALUE cMutex;

static void Mutex_mark(void *ptr) {
  struct um_mutex *mutex = ptr;
  rb_gc_mark_movable(mutex->self);
}

static void Mutex_compact(void *ptr) {
  struct um_mutex *mutex = ptr;
  mutex->self = rb_gc_location(mutex->self);
}

static size_t Mutex_size(const void *ptr) {
  return sizeof(struct um_mutex);
}

static const rb_data_type_t Mutex_type = {
    "UringMachineMutex",
    {Mutex_mark, free, Mutex_size, Mutex_compact},
    0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED
};

static VALUE Mutex_allocate(VALUE klass) {
  struct um_mutex *mutex = malloc(sizeof(struct um_mutex));
  return TypedData_Wrap_Struct(klass, &Mutex_type, mutex);
}

inline struct um_mutex *Mutex_data(VALUE self) {
  return RTYPEDDATA_DATA(self);
}

VALUE Mutex_initialize(VALUE self) {
  struct um_mutex *mutex = Mutex_data(self);
  mutex->self = self;
  um_mutex_init(mutex);
  return self;
}

void Init_Mutex(void) {
  cMutex = rb_define_class_under(cUM, "Mutex", rb_cObject);
  rb_define_alloc_func(cMutex, Mutex_allocate);

  rb_define_method(cMutex, "initialize", Mutex_initialize, 0);
}

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
uringmachine-0.5.1 ext/um/um_mutex_class.c
uringmachine-0.5 ext/um/um_mutex_class.c