Esempio n. 1
0
static mrb_value
mrb_uv_cond_wait(mrb_state *mrb, mrb_value self)
{
  mrb_value mutex_val;
  uv_mutex_t *mutex;
  mrb_get_args(mrb, "o", &mutex_val);

  mutex = (uv_mutex_t*)mrb_uv_get_ptr(mrb, mutex_val, &mrb_uv_mutex_type);
  return uv_cond_wait((uv_cond_t*)mrb_uv_get_ptr(mrb, self, &mrb_uv_cond_type), mutex), self;
}
Esempio n. 2
0
static mrb_value
mrb_uv_cond_destroy(mrb_state *mrb, mrb_value self)
{
  uv_cond_destroy((uv_cond_t*)mrb_uv_get_ptr(mrb, self, &mrb_uv_cond_type));
  DATA_PTR(self) = NULL;
  return self;
}
Esempio n. 3
0
static mrb_value
mrb_uv_mutex_unlock(mrb_state *mrb, mrb_value self)
{
  uv_mutex_t *m = (uv_mutex_t*)mrb_uv_get_ptr(mrb, self, &mrb_uv_mutex_type);
  uv_mutex_unlock(m);
  return self;
}
Esempio n. 4
0
static mrb_value
mrb_uv_cond_timed_wait(mrb_state *mrb, mrb_value self)
{
  mrb_value mutex_val;
  mrb_int timeout;
  uv_mutex_t *mutex;
  int err;
  mrb_get_args(mrb, "oi", &mutex_val, &timeout);

  mutex = (uv_mutex_t*)mrb_uv_get_ptr(mrb, mutex_val, &mrb_uv_mutex_type);
  err = uv_cond_timedwait((uv_cond_t*)mrb_uv_get_ptr(mrb, self, &mrb_uv_cond_type), mutex, timeout);
  if (err == UV_ETIMEDOUT) {
    return symbol_value_lit(mrb, "timedout");
  }
  mrb_uv_check_error(mrb, err);
  return self;
}
Esempio n. 5
0
File: dl.c Progetto: mattn/mruby-uv
void
mrb_uv_dlclose(mrb_state *mrb, mrb_value dl)
{
  uv_lib_t *lib = (uv_lib_t*)mrb_uv_get_ptr(mrb, dl, &dl_type);
  uv_dlclose(lib);
  mrb_free(mrb, DATA_PTR(dl));
  DATA_PTR(dl) = NULL;
}
Esempio n. 6
0
static mrb_value
mrb_uv_key_destroy(mrb_state *mrb, mrb_value self)
{
  uv_key_t *key = (uv_key_t*)mrb_uv_get_ptr(mrb, self, &mrb_uv_key_type);
  mrb_ary_clear(mrb, mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "values")));
  uv_key_delete(key);
  return self;
}
Esempio n. 7
0
static mrb_value
mrb_uv_barrier_destroy(mrb_state *mrb, mrb_value self)
{
  uv_barrier_destroy((uv_barrier_t*)mrb_uv_get_ptr(mrb, self, &barrier_type));
  mrb_free(mrb, DATA_PTR(self));
  DATA_PTR(self) = NULL;
  return self;
}
Esempio n. 8
0
static mrb_value
mrb_uv_mutex_destroy(mrb_state *mrb, mrb_value self)
{
  uv_mutex_t *m = (uv_mutex_t*)mrb_uv_get_ptr(mrb, self, &mrb_uv_mutex_type);
  uv_mutex_destroy(m);
  mrb_free(mrb, m);
  DATA_PTR(self) = NULL;
  return self;
}
Esempio n. 9
0
static mrb_value
mrb_uv_sem_destroy(mrb_state *mrb, mrb_value self)
{
  uv_sem_t *sem = (uv_sem_t*)mrb_uv_get_ptr(mrb, self, &sem_type);
  uv_sem_destroy(sem);
  mrb_free(mrb, DATA_PTR(self));
  DATA_PTR(self) = NULL;
  return self;
}
Esempio n. 10
0
static mrb_value
mrb_uv_key_get(mrb_state *mrb, mrb_value self)
{
  uv_key_t *key;
  void *p;

  key = (uv_key_t*)mrb_uv_get_ptr(mrb, self, &mrb_uv_key_type);
  p = uv_key_get(key);
  return p? mrb_obj_value(p) : mrb_nil_value();
}
Esempio n. 11
0
File: dl.c Progetto: mattn/mruby-uv
void*
mrb_uv_dlsym(mrb_state *mrb, mrb_value dl, char const *name)
{
  int err;
  void *p;
  uv_lib_t *lib = (uv_lib_t*)mrb_uv_get_ptr(mrb, dl, &dl_type);
  err = uv_dlsym(lib, name, &p);
  if(err == -1) {
    mrb_raise(mrb, E_UV_ERROR, uv_dlerror(lib));
  }
  return p;
}
Esempio n. 12
0
static mrb_value
mrb_uv_sem_trywait(mrb_state *mrb, mrb_value self)
{
  int err;
  uv_sem_t *sem = (uv_sem_t*)mrb_uv_get_ptr(mrb, self, &sem_type);
  err = uv_sem_trywait(sem);
  if(err == UV_EAGAIN) {
    return mrb_false_value();
  }
  if(err < 0) {
    mrb_uv_check_error(mrb, err);
  }
  return mrb_true_value();
}
Esempio n. 13
0
static mrb_value
mrb_uv_key_set(mrb_state *mrb, mrb_value self)
{
  uv_key_t *key;
  void *p;
  mrb_value new_val;
  mrb_value ary;

  mrb_get_args(mrb, "o", &new_val);

  if (mrb_type(new_val) < MRB_TT_HAS_BASIC) {
    mrb_raisef(mrb, E_TYPE_ERROR, "cannot store value without basic: %S", new_val);
  }

  key = (uv_key_t*)mrb_uv_get_ptr(mrb, self, &mrb_uv_key_type);
  p = uv_key_get(key);

  ary = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "values"));
  mrb_assert(mrb_array_p(ary));

  if (p) {
    /* remove value */
    int i, dst;
    for (i = 0, dst = 0; i < RARRAY_LEN(ary); ++i) {
      mrb_value v = RARRAY_PTR(ary)[i];
      if (mrb_ptr(v) != p) {
        mrb_ary_ptr(ary)->ptr[dst++] = v;
      }
    }
    RARRAY_LEN(ary) = dst;
  }

  uv_key_set(key, mrb_ptr(new_val));
  mrb_ary_push(mrb, ary, new_val); /* protect from GC */

  return new_val;
}
Esempio n. 14
0
static mrb_value
mrb_uv_cond_signal(mrb_state *mrb, mrb_value self)
{
  return uv_cond_signal((uv_cond_t*)mrb_uv_get_ptr(mrb, self, &mrb_uv_cond_type)), self;
}
Esempio n. 15
0
static mrb_value
mrb_uv_barrier_wait(mrb_state *mrb, mrb_value self)
{
  uv_barrier_wait((uv_barrier_t*)mrb_uv_get_ptr(mrb, self, &barrier_type));
  return self;
}
Esempio n. 16
0
static mrb_value
mrb_uv_cond_broadcast(mrb_state *mrb, mrb_value self)
{
  return uv_cond_broadcast((uv_cond_t*)mrb_uv_get_ptr(mrb, self, &mrb_uv_cond_type)), self;
}
Esempio n. 17
0
static mrb_value
mrb_uv_sem_wait(mrb_state *mrb, mrb_value self)
{
  uv_sem_t *sem = (uv_sem_t*)mrb_uv_get_ptr(mrb, self, &sem_type);
  return uv_sem_wait(sem), self;
}
Esempio n. 18
0
static mrb_value
mrb_uv_mutex_trylock(mrb_state *mrb, mrb_value self)
{
  return mrb_bool_value(uv_mutex_trylock((uv_mutex_t*)mrb_uv_get_ptr(mrb, self, &mrb_uv_mutex_type)));
}