about summary refs log tree commit homepage
path: root/ext/raindrops
diff options
context:
space:
mode:
authorEric Wong <bofh@yhbt.net>2024-03-24 21:10:43 +0000
committerEric Wong <bofh@yhbt.net>2024-03-25 21:19:11 +0000
commit46141941e58419b3325e50eebac683baeede2c19 (patch)
tree739537e1d5b06c35110083f96f1c451655566a71 /ext/raindrops
parent38eba33cb1b7b0a3c93afcaa79263e3b1daf4955 (diff)
downloadraindrops-46141941e58419b3325e50eebac683baeede2c19.tar.gz
While no user is likely to have enough listeners to trigger an
overflow, just use ruby_xrealloc2 to be safe since it's already
provided by Ruby (and AFAIK reallocarray(3) isn't standardized).
Diffstat (limited to 'ext/raindrops')
-rw-r--r--ext/raindrops/khashl.h8
-rw-r--r--ext/raindrops/linux_inet_diag.c4
2 files changed, 6 insertions, 6 deletions
diff --git a/ext/raindrops/khashl.h b/ext/raindrops/khashl.h
index df97c7f..425d95e 100644
--- a/ext/raindrops/khashl.h
+++ b/ext/raindrops/khashl.h
@@ -164,9 +164,8 @@ static kh_inline khint_t __kh_h2b(khint_t hash, khint_t bits) { return hash * 26
                 if (!new_used) return -1; /* not enough memory */ \
                 n_buckets = h->keys? (khint_t)1U<<h->bits : 0U; \
                 if (n_buckets < new_n_buckets) { /* expand */ \
-                        khkey_t *new_keys = (khkey_t*)krealloc((void*)h->keys, new_n_buckets * sizeof(khkey_t)); \
-                        if (!new_keys) { kfree(new_used); return -1; } \
-                        h->keys = new_keys; \
+                        h->keys = ruby_xrealloc2(h->keys, new_n_buckets, \
+                                                sizeof(khkey_t)); \
                 } /* otherwise shrink */ \
                 new_mask = new_n_buckets - 1; \
                 for (j = 0; j != n_buckets; ++j) { \
@@ -189,7 +188,8 @@ static kh_inline khint_t __kh_h2b(khint_t hash, khint_t bits) { return hash * 26
                         } \
                 } \
                 if (n_buckets > new_n_buckets) /* shrink the hash table */ \
-                        h->keys = (khkey_t*)krealloc((void *)h->keys, new_n_buckets * sizeof(khkey_t)); \
+                        h->keys = ruby_xrealloc2(h->keys, new_n_buckets, \
+                                                sizeof(khkey_t)); \
                 kfree(h->used); /* free the working space */ \
                 h->used = new_used, h->bits = new_bits; \
                 return 0; \
diff --git a/ext/raindrops/linux_inet_diag.c b/ext/raindrops/linux_inet_diag.c
index d0638d7..2fd158a 100644
--- a/ext/raindrops/linux_inet_diag.c
+++ b/ext/raindrops/linux_inet_diag.c
@@ -53,10 +53,10 @@ struct listen_stats {
         uint32_t listener_p;
 };
 
-/* override khashl.h defaults */
+/* override khashl.h defaults, these run w/o GVL */
 #define kcalloc(N,Z) xcalloc(N,Z)
 #define kmalloc(Z) xmalloc(Z)
-#define krealloc(P,Z) xrealloc(P,Z)
+#define krealloc(P,Z) abort() /* never called, we use ruby_xrealloc2 */
 #define kfree(P) xfree(P)
 
 #include "khashl.h"