Lines Matching defs:anvil
9 #include "service-anvil.h"
18 service_list_anvil_discard_input_stop(struct service_anvil_global *anvil)
20 if (anvil->io_blocking != NULL) {
21 io_remove(&anvil->io_blocking);
22 io_remove(&anvil->io_nonblocking);
26 static void anvil_input_fd_discard(struct service_anvil_global *anvil, int fd)
33 i_error("read(anvil fd) failed: %m");
34 service_list_anvil_discard_input_stop(anvil);
38 static void anvil_input_blocking_discard(struct service_anvil_global *anvil)
40 anvil_input_fd_discard(anvil, anvil->blocking_fd[0]);
43 static void anvil_input_nonblocking_discard(struct service_anvil_global *anvil)
45 anvil_input_fd_discard(anvil, anvil->nonblocking_fd[0]);
48 static void service_list_anvil_discard_input(struct service_anvil_global *anvil)
50 if (anvil->io_blocking != NULL)
53 anvil->io_blocking = io_add(anvil->blocking_fd[0], IO_READ,
54 anvil_input_blocking_discard, anvil);
55 anvil->io_nonblocking = io_add(anvil->nonblocking_fd[0], IO_READ,
56 anvil_input_nonblocking_discard, anvil);
65 *error_r = t_strdup_printf("write(anvil) failed: %m");
69 *error_r = t_strdup_printf("write(anvil) returned EOF");
85 i_error("write(anvil process) failed: %m");
105 struct service_anvil_global *anvil = service_anvil_global;
111 service_list_anvil_discard_input_stop(anvil);
113 if (anvil_send_handshake(anvil->blocking_fd[1], &error) < 0 ||
114 anvil_send_handshake(anvil->nonblocking_fd[1], &error) < 0)
138 services->anvil->log_fd[1], &b, 1);
140 i_error("fd_send(anvil log fd) failed: %m");
142 i_error("fd_send(anvil log fd) failed: disconnected");
147 struct service_anvil_global *anvil;
149 anvil = i_new(struct service_anvil_global, 1);
150 if (pipe(anvil->status_fd) < 0)
152 if (pipe(anvil->blocking_fd) < 0)
154 if (pipe(anvil->nonblocking_fd) < 0)
156 if (socketpair(AF_UNIX, SOCK_STREAM, 0, anvil->log_fdpass_fd) < 0)
158 fd_set_nonblock(anvil->status_fd[0], TRUE);
159 fd_set_nonblock(anvil->status_fd[1], TRUE);
160 fd_set_nonblock(anvil->nonblocking_fd[1], TRUE);
162 fd_close_on_exec(anvil->status_fd[0], TRUE);
163 fd_close_on_exec(anvil->status_fd[1], TRUE);
164 fd_close_on_exec(anvil->blocking_fd[0], TRUE);
165 fd_close_on_exec(anvil->blocking_fd[1], TRUE);
166 fd_close_on_exec(anvil->nonblocking_fd[0], TRUE);
167 fd_close_on_exec(anvil->nonblocking_fd[1], TRUE);
168 fd_close_on_exec(anvil->log_fdpass_fd[0], TRUE);
169 fd_close_on_exec(anvil->log_fdpass_fd[1], TRUE);
171 anvil->kills =
172 service_process_notify_init(anvil->nonblocking_fd[1],
174 service_anvil_global = anvil;
179 struct service_anvil_global *anvil = service_anvil_global;
181 service_list_anvil_discard_input_stop(anvil);
182 service_process_notify_deinit(&anvil->kills);
183 if (close(anvil->log_fdpass_fd[0]) < 0)
184 i_error("close(anvil) failed: %m");
185 if (close(anvil->log_fdpass_fd[1]) < 0)
186 i_error("close(anvil) failed: %m");
187 if (close(anvil->blocking_fd[0]) < 0)
188 i_error("close(anvil) failed: %m");
189 if (close(anvil->blocking_fd[1]) < 0)
190 i_error("close(anvil) failed: %m");
191 if (close(anvil->nonblocking_fd[0]) < 0)
192 i_error("close(anvil) failed: %m");
193 if (close(anvil->nonblocking_fd[1]) < 0)
194 i_error("close(anvil) failed: %m");
195 if (close(anvil->status_fd[0]) < 0)
196 i_error("close(anvil) failed: %m");
197 if (close(anvil->status_fd[1]) < 0)
198 i_error("close(anvil) failed: %m");
199 i_free(anvil);