Lines Matching refs:cbdata

498 								   struct rspamd_lua_process_cbdata *cbdata)  in rspamd_lua_execute_lua_subprocess()  argument
506 lua_rawgeti (L, LUA_REGISTRYINDEX, cbdata->func_cbref); in rspamd_lua_execute_lua_subprocess()
516 r = write (cbdata->sp[1], &wlen, sizeof (wlen)); in rspamd_lua_execute_lua_subprocess()
521 r = write (cbdata->sp[1], s, slen); in rspamd_lua_execute_lua_subprocess()
531 r = write (cbdata->sp[1], &wlen, sizeof (wlen)); in rspamd_lua_execute_lua_subprocess()
537 r = write (cbdata->sp[1], t->start, wlen); in rspamd_lua_execute_lua_subprocess()
554 struct rspamd_lua_process_cbdata *cbdata, in rspamd_lua_call_on_complete() argument
563 lua_rawgeti (L, LUA_REGISTRYINDEX, cbdata->cb_cbref); in rspamd_lua_call_on_complete()
590 struct rspamd_lua_process_cbdata *cbdata = ud; in rspamd_lua_cld_handler() local
597 died = waitpid (cbdata->cpid, &res, WNOHANG); in rspamd_lua_cld_handler()
604 L = cbdata->L; in rspamd_lua_cld_handler()
605 msg_info ("handled SIGCHLD from %P", cbdata->cpid); in rspamd_lua_cld_handler()
607 if (!cbdata->replied) { in rspamd_lua_cld_handler()
609 ev_io_stop (cbdata->event_loop, &cbdata->ev); in rspamd_lua_cld_handler()
610 rspamd_lua_call_on_complete (cbdata->L, cbdata, in rspamd_lua_cld_handler()
615 close (cbdata->sp[0]); in rspamd_lua_cld_handler()
616 luaL_unref (L, LUA_REGISTRYINDEX, cbdata->func_cbref); in rspamd_lua_cld_handler()
617 luaL_unref (L, LUA_REGISTRYINDEX, cbdata->cb_cbref); in rspamd_lua_cld_handler()
618 g_string_free (cbdata->io_buf, TRUE); in rspamd_lua_cld_handler()
620 if (cbdata->out_buf) { in rspamd_lua_cld_handler()
621 g_string_free (cbdata->out_buf, TRUE); in rspamd_lua_cld_handler()
628 srv_cmd.cmd.on_fork.cpid = cbdata->cpid; in rspamd_lua_cld_handler()
630 rspamd_srv_send_command (cbdata->wrk, cbdata->event_loop, &srv_cmd, -1, in rspamd_lua_cld_handler()
632 g_free (cbdata); in rspamd_lua_cld_handler()
641 struct rspamd_lua_process_cbdata *cbdata = in rspamd_lua_subprocess_io() local
645 if (cbdata->sz == (guint64)-1) { in rspamd_lua_subprocess_io()
649 r = read (cbdata->sp[0], cbdata->io_buf->str + cbdata->io_buf->len, in rspamd_lua_subprocess_io()
650 sizeof (guint64) - cbdata->io_buf->len); in rspamd_lua_subprocess_io()
653 ev_io_stop (cbdata->event_loop, &cbdata->ev); in rspamd_lua_subprocess_io()
654 rspamd_lua_call_on_complete (cbdata->L, cbdata, in rspamd_lua_subprocess_io()
656 cbdata->replied = TRUE; in rspamd_lua_subprocess_io()
657 kill (cbdata->cpid, SIGTERM); in rspamd_lua_subprocess_io()
666 ev_io_stop (cbdata->event_loop, &cbdata->ev); in rspamd_lua_subprocess_io()
667 rspamd_lua_call_on_complete (cbdata->L, cbdata, in rspamd_lua_subprocess_io()
669 cbdata->replied = TRUE; in rspamd_lua_subprocess_io()
670 kill (cbdata->cpid, SIGTERM); in rspamd_lua_subprocess_io()
676 cbdata->io_buf->len += r; in rspamd_lua_subprocess_io()
678 if (cbdata->io_buf->len == sizeof (guint64)) { in rspamd_lua_subprocess_io()
679 memcpy ((guchar *)&sz, cbdata->io_buf->str, sizeof (sz)); in rspamd_lua_subprocess_io()
682 cbdata->is_error = TRUE; in rspamd_lua_subprocess_io()
686 cbdata->io_buf->len = 0; in rspamd_lua_subprocess_io()
687 cbdata->sz = sz; in rspamd_lua_subprocess_io()
688 g_string_set_size (cbdata->io_buf, sz + 1); in rspamd_lua_subprocess_io()
689 cbdata->io_buf->len = 0; in rspamd_lua_subprocess_io()
694 r = read (cbdata->sp[0], cbdata->io_buf->str + cbdata->io_buf->len, in rspamd_lua_subprocess_io()
695 cbdata->sz - cbdata->io_buf->len); in rspamd_lua_subprocess_io()
698 ev_io_stop (cbdata->event_loop, &cbdata->ev); in rspamd_lua_subprocess_io()
699 rspamd_lua_call_on_complete (cbdata->L, cbdata, in rspamd_lua_subprocess_io()
701 cbdata->replied = TRUE; in rspamd_lua_subprocess_io()
702 kill (cbdata->cpid, SIGTERM); in rspamd_lua_subprocess_io()
711 ev_io_stop (cbdata->event_loop, &cbdata->ev); in rspamd_lua_subprocess_io()
712 rspamd_lua_call_on_complete (cbdata->L, cbdata, in rspamd_lua_subprocess_io()
714 cbdata->replied = TRUE; in rspamd_lua_subprocess_io()
715 kill (cbdata->cpid, SIGTERM); in rspamd_lua_subprocess_io()
721 cbdata->io_buf->len += r; in rspamd_lua_subprocess_io()
723 if (cbdata->io_buf->len == cbdata->sz) { in rspamd_lua_subprocess_io()
726 ev_io_stop (cbdata->event_loop, &cbdata->ev); in rspamd_lua_subprocess_io()
728 if (cbdata->is_error) { in rspamd_lua_subprocess_io()
729 cbdata->io_buf->str[cbdata->io_buf->len] = '\0'; in rspamd_lua_subprocess_io()
730 rspamd_lua_call_on_complete (cbdata->L, cbdata, in rspamd_lua_subprocess_io()
731 cbdata->io_buf->str, NULL, 0); in rspamd_lua_subprocess_io()
734 rspamd_lua_call_on_complete (cbdata->L, cbdata, in rspamd_lua_subprocess_io()
735 NULL, cbdata->io_buf->str, cbdata->io_buf->len); in rspamd_lua_subprocess_io()
738 cbdata->replied = TRUE; in rspamd_lua_subprocess_io()
741 rspamd_socket_blocking (cbdata->sp[0]); in rspamd_lua_subprocess_io()
743 (void) !write (cbdata->sp[0], rep, sizeof (rep)); in rspamd_lua_subprocess_io()
752 struct rspamd_lua_process_cbdata *cbdata; in lua_worker_spawn_process() local
774 cbdata = g_malloc0 (sizeof (*cbdata)); in lua_worker_spawn_process()
775 cbdata->cb_cbref = cb_cbref; in lua_worker_spawn_process()
776 cbdata->func_cbref = func_cbref; in lua_worker_spawn_process()
779 cbdata->out_buf = g_string_new_len (input, inputlen); in lua_worker_spawn_process()
780 cbdata->out_pos = 0; in lua_worker_spawn_process()
783 if (rspamd_socketpair (cbdata->sp, SOCK_STREAM) == -1) { in lua_worker_spawn_process()
785 luaL_unref (L, LUA_REGISTRYINDEX, cbdata->func_cbref); in lua_worker_spawn_process()
786 luaL_unref (L, LUA_REGISTRYINDEX, cbdata->cb_cbref); in lua_worker_spawn_process()
787 g_free (cbdata); in lua_worker_spawn_process()
793 cbdata->wrk = w; in lua_worker_spawn_process()
794 cbdata->L = L; in lua_worker_spawn_process()
795 cbdata->event_loop = actx->event_loop; in lua_worker_spawn_process()
796 cbdata->sz = (guint64)-1; in lua_worker_spawn_process()
802 close (cbdata->sp[0]); in lua_worker_spawn_process()
803 close (cbdata->sp[1]); in lua_worker_spawn_process()
804 luaL_unref (L, LUA_REGISTRYINDEX, cbdata->func_cbref); in lua_worker_spawn_process()
805 luaL_unref (L, LUA_REGISTRYINDEX, cbdata->cb_cbref); in lua_worker_spawn_process()
806 g_free (cbdata); in lua_worker_spawn_process()
827 close (cbdata->sp[0]); in lua_worker_spawn_process()
829 rspamd_socket_blocking (cbdata->sp[1]); in lua_worker_spawn_process()
831 ev_loop_destroy (cbdata->event_loop); in lua_worker_spawn_process()
840 cbdata->event_loop = ev_loop_new (EVFLAG_SIGNALFD); in lua_worker_spawn_process()
842 rspamd_lua_execute_lua_subprocess (L, cbdata); in lua_worker_spawn_process()
845 rc = read (cbdata->sp[1], inbuf, sizeof (inbuf)); in lua_worker_spawn_process()
859 cbdata->cpid = pid; in lua_worker_spawn_process()
860 cbdata->io_buf = g_string_sized_new (8); in lua_worker_spawn_process()
867 rspamd_srv_send_command (w, cbdata->event_loop, &srv_cmd, -1, NULL, NULL); in lua_worker_spawn_process()
869 close (cbdata->sp[1]); in lua_worker_spawn_process()
870 rspamd_socket_nonblocking (cbdata->sp[0]); in lua_worker_spawn_process()
872 rspamd_worker_set_signal_handler (SIGCHLD, w, cbdata->event_loop, in lua_worker_spawn_process()
874 cbdata); in lua_worker_spawn_process()
877 ev_io_init (&cbdata->ev, rspamd_lua_subprocess_io, cbdata->sp[0], EV_READ); in lua_worker_spawn_process()
878 cbdata->ev.data = cbdata; in lua_worker_spawn_process()
879 ev_io_start (cbdata->event_loop, &cbdata->ev); in lua_worker_spawn_process()