Sha256: 48184a8987516cf67488bc977c3507d17fcfba43b4a16062f391138af6652a99

Contents?: true

Size: 1.57 KB

Versions: 18

Compression:

Stored size: 1.57 KB

Contents

#include <byebug.h>

/**
 * A simple linked list containing locked threads, FIFO style.
 */

typedef struct locked_thread_t
{
  VALUE thread;
  struct locked_thread_t *next;
} locked_thread_t;

static locked_thread_t *locked_head = NULL;
static locked_thread_t *locked_tail = NULL;

extern int
is_in_locked(VALUE thread)
{
  locked_thread_t *node;

  if (!locked_head)
    return 0;

  for (node = locked_head; node != locked_tail; node = node->next)
    if (node->thread == thread)
      return 1;

  return 0;
}

extern void
add_to_locked(VALUE thread)
{
  locked_thread_t *node;

  if (is_in_locked(thread))
    return;

  node = ALLOC(locked_thread_t);
  node->thread = thread;
  node->next = NULL;

  if (locked_tail)
    locked_tail->next = node;

  locked_tail = node;

  if (!locked_head)
    locked_head = node;
}

extern VALUE
pop_from_locked()
{
  VALUE thread;
  locked_thread_t *node;

  if (!locked_head)
    return Qnil;

  node = locked_head;
  locked_head = locked_head->next;

  if (locked_tail == node)
    locked_tail = NULL;

  thread = node->thread;
  xfree(node);

  return thread;
}

extern void
remove_from_locked(VALUE thread)
{
  locked_thread_t *node;
  locked_thread_t *next_node;

  if (NIL_P(thread) || !locked_head || !is_in_locked(thread))
    return;

  if (locked_head->thread == thread)
  {
    pop_from_locked();
    return;
  }

  for (node = locked_head; node != locked_tail; node = node->next)
    if (node->next && node->next->thread == thread)
    {
      next_node = node->next;
      node->next = next_node->next;
      xfree(next_node);
      return;
    }
}

Version data entries

18 entries across 18 versions & 2 rubygems

Version Path
byebug-8.2.2 ext/byebug/locker.c
byebug-8.2.1 ext/byebug/locker.c
byebug-8.2.0 ext/byebug/locker.c
byebug-8.1.0 ext/byebug/locker.c
byebug-8.0.1 ext/byebug/locker.c
byebug-8.0.0 ext/byebug/locker.c
byebug-7.0.0 ext/byebug/locker.c
sc_core-0.0.7 test/dummy/vendor/bundle/ruby/2.2.0/gems/byebug-5.0.0/ext/byebug/locker.c
byebug-6.0.2 ext/byebug/locker.c
byebug-6.0.1 ext/byebug/locker.c
byebug-6.0.0 ext/byebug/locker.c
byebug-5.0.0 ext/byebug/locker.c
byebug-4.0.5 ext/byebug/locker.c
byebug-4.0.4 ext/byebug/locker.c
byebug-4.0.3 ext/byebug/locker.c
byebug-4.0.2 ext/byebug/locker.c
byebug-4.0.1 ext/byebug/locker.c
byebug-4.0.0 ext/byebug/locker.c