about summary refs log tree commit homepage
path: root/ext/sleepy_penguin/kqueue.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/sleepy_penguin/kqueue.c')
-rw-r--r--ext/sleepy_penguin/kqueue.c17
1 files changed, 2 insertions, 15 deletions
diff --git a/ext/sleepy_penguin/kqueue.c b/ext/sleepy_penguin/kqueue.c
index 83f3623..22e20f1 100644
--- a/ext/sleepy_penguin/kqueue.c
+++ b/ext/sleepy_penguin/kqueue.c
@@ -74,10 +74,8 @@ static int kq_fd_check(struct kq_per_thread *kpt)
 
 static struct kq_per_thread *kpt_get(VALUE self, int nchanges, int nevents)
 {
-        static __thread struct kq_per_thread *kpt;
+        struct kq_per_thread *kpt;
         size_t size;
-        void *ptr;
-        int err;
         int max = nchanges > nevents ? nchanges : nevents;
 
         /* error check here to prevent OOM from posix_memalign */
@@ -86,20 +84,9 @@ static struct kq_per_thread *kpt_get(VALUE self, int nchanges, int nevents)
                 rb_sys_fail("kevent got negative events < 0");
         }
 
-        if (kpt && kpt->capa >= max)
-                goto out;
-
         size = sizeof(struct kq_per_thread) + sizeof(struct kevent) * max;
-
-        free(kpt); /* free(NULL) is POSIX */
-        err = posix_memalign(&ptr, rb_sp_l1_cache_line_size, size);
-        if (err) {
-                errno = err;
-                rb_memerror();
-        }
-        kpt = ptr;
+        kpt = rb_sp_gettlsbuf(&size);
         kpt->capa = max;
-out:
         kpt->nchanges = nchanges;
         kpt->nevents = nevents;
         kpt->io = self;