]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Do not use alloca for huge allocations
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 20 Jul 2019 10:11:39 +0000 (11:11 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 20 Jul 2019 10:11:39 +0000 (11:11 +0100)
src/lua/lua_tcp.c

index 371e72d5c241819a6b52ea60b8fa56b3e6f09b28..d5d4975997ee8771720a3e4de94e3a033eb81990 100644 (file)
@@ -789,7 +789,14 @@ lua_tcp_write_helper (struct lua_tcp_cbdata *cbd)
        niov = wh->iovlen;
        remain = wh->pos;
        /* We know that niov is small enough for that */
-       cur_iov = alloca (niov * sizeof (struct iovec));
+
+       if (niov < 1024) {
+               cur_iov = g_alloca (niov * sizeof (struct iovec));
+       }
+       else {
+               cur_iov = g_malloc0 (niov * sizeof (struct iovec));
+       }
+
        memcpy (cur_iov, wh->iov, niov * sizeof (struct iovec));
 
        for (i = 0; i < wh->iovlen && remain > 0; i++) {
@@ -822,6 +829,10 @@ lua_tcp_write_helper (struct lua_tcp_cbdata *cbd)
                r = sendmsg (cbd->fd, &msg, flags);
        }
 
+       if (niov >= 1024) {
+               g_free (cur_iov);
+       }
+
        if (r == -1) {
                lua_tcp_push_error (cbd, FALSE, "IO write error while trying to write %d "
                                "bytes: %s", (gint)remain, strerror (errno));