Lines Matching defs:pipe
64 static pool_t dsync_ibc_pipe_get_pool(struct dsync_ibc_pipe *pipe)
69 pools = array_get_modifiable(&pipe->pools, &count);
71 return pool_alloconly_create(MEMPOOL_GROWING"pipe item pool", 1024);
74 array_delete(&pipe->pools, count-1, 1);
80 dsync_ibc_pipe_push_item(struct dsync_ibc_pipe *pipe, enum item_type type)
84 item = array_append_space(&pipe->item_queue);
100 item->pool = dsync_ibc_pipe_get_pool(pipe);
107 dsync_ibc_pipe_pop_item(struct dsync_ibc_pipe *pipe, enum item_type type)
111 if (array_count(&pipe->item_queue) == 0)
114 item = array_idx_modifiable(&pipe->item_queue, 0);
116 pipe->pop_item = *item;
117 array_delete(&pipe->item_queue, 0, 1);
120 pool_unref(&pipe->pop_pool);
121 pipe->pop_pool = pipe->pop_item.pool;
122 return &pipe->pop_item;
125 static bool dsync_ibc_pipe_try_pop_eol(struct dsync_ibc_pipe *pipe)
129 if (array_count(&pipe->item_queue) == 0)
132 item = array_idx(&pipe->item_queue, 0);
136 array_delete(&pipe->item_queue, 0, 1);
142 struct dsync_ibc_pipe *pipe = (struct dsync_ibc_pipe *)ibc;
146 if (pipe->remote != NULL) {
147 i_assert(pipe->remote->remote == pipe);
148 pipe->remote->remote = NULL;
151 pool_unref(&pipe->pop_pool);
152 array_foreach_modifiable(&pipe->item_queue, item) {
155 array_foreach_modifiable(&pipe->pools, poolp)
157 array_free(&pipe->pools);
158 array_free(&pipe->item_queue);
159 i_free(pipe);
166 struct dsync_ibc_pipe *pipe = (struct dsync_ibc_pipe *)ibc;
169 item = dsync_ibc_pipe_push_item(pipe->remote, ITEM_HANDSHAKE);
189 struct dsync_ibc_pipe *pipe = (struct dsync_ibc_pipe *)ibc;
192 item = dsync_ibc_pipe_pop_item(pipe, ITEM_HANDSHAKE);
202 struct dsync_ibc_pipe *pipe = (struct dsync_ibc_pipe *)ibc;
204 return array_count(&pipe->remote->item_queue) > 0;
209 struct dsync_ibc_pipe *pipe = (struct dsync_ibc_pipe *)ibc;
211 return array_count(&pipe->item_queue) > 0;
218 struct dsync_ibc_pipe *pipe = (struct dsync_ibc_pipe *)ibc;
220 dsync_ibc_pipe_push_item(pipe->remote, ITEM_END_OF_LIST);
227 struct dsync_ibc_pipe *pipe = (struct dsync_ibc_pipe *)ibc;
230 item = dsync_ibc_pipe_push_item(pipe->remote, ITEM_MAILBOX_STATE);
238 struct dsync_ibc_pipe *pipe = (struct dsync_ibc_pipe *)ibc;
241 if (dsync_ibc_pipe_try_pop_eol(pipe))
244 item = dsync_ibc_pipe_pop_item(pipe, ITEM_MAILBOX_STATE);
257 struct dsync_ibc_pipe *pipe = (struct dsync_ibc_pipe *)ibc;
260 item = dsync_ibc_pipe_push_item(pipe->remote, ITEM_MAILBOX_TREE_NODE);
272 struct dsync_ibc_pipe *pipe = (struct dsync_ibc_pipe *)ibc;
275 if (dsync_ibc_pipe_try_pop_eol(pipe))
278 item = dsync_ibc_pipe_pop_item(pipe, ITEM_MAILBOX_TREE_NODE);
294 struct dsync_ibc_pipe *pipe = (struct dsync_ibc_pipe *)ibc;
297 item = dsync_ibc_pipe_push_item(pipe->remote, ITEM_MAILBOX_DELETE);
312 struct dsync_ibc_pipe *pipe = (struct dsync_ibc_pipe *)ibc;
315 if (dsync_ibc_pipe_try_pop_eol(pipe))
318 item = dsync_ibc_pipe_pop_item(pipe, ITEM_MAILBOX_DELETE);
332 struct dsync_ibc_pipe *pipe = (struct dsync_ibc_pipe *)ibc;
337 item = dsync_ibc_pipe_push_item(pipe->remote, ITEM_MAILBOX);
353 struct dsync_ibc_pipe *pipe = (struct dsync_ibc_pipe *)ibc;
356 if (dsync_ibc_pipe_try_pop_eol(pipe))
359 item = dsync_ibc_pipe_pop_item(pipe, ITEM_MAILBOX);
371 struct dsync_ibc_pipe *pipe = (struct dsync_ibc_pipe *)ibc;
374 item = dsync_ibc_pipe_push_item(pipe->remote, ITEM_MAILBOX_ATTRIBUTE);
382 struct dsync_ibc_pipe *pipe = (struct dsync_ibc_pipe *)ibc;
385 if (dsync_ibc_pipe_try_pop_eol(pipe))
388 item = dsync_ibc_pipe_pop_item(pipe, ITEM_MAILBOX_ATTRIBUTE);
400 struct dsync_ibc_pipe *pipe = (struct dsync_ibc_pipe *)ibc;
403 item = dsync_ibc_pipe_push_item(pipe->remote, ITEM_MAIL_CHANGE);
411 struct dsync_ibc_pipe *pipe = (struct dsync_ibc_pipe *)ibc;
414 if (dsync_ibc_pipe_try_pop_eol(pipe))
417 item = dsync_ibc_pipe_pop_item(pipe, ITEM_MAIL_CHANGE);
429 struct dsync_ibc_pipe *pipe = (struct dsync_ibc_pipe *)ibc;
432 item = dsync_ibc_pipe_push_item(pipe->remote, ITEM_MAIL_REQUEST);
441 struct dsync_ibc_pipe *pipe = (struct dsync_ibc_pipe *)ibc;
444 if (dsync_ibc_pipe_try_pop_eol(pipe))
447 item = dsync_ibc_pipe_pop_item(pipe, ITEM_MAIL_REQUEST);
458 struct dsync_ibc_pipe *pipe = (struct dsync_ibc_pipe *)ibc;
461 item = dsync_ibc_pipe_push_item(pipe->remote, ITEM_MAIL);
478 struct dsync_ibc_pipe *pipe = (struct dsync_ibc_pipe *)ibc;
481 if (dsync_ibc_pipe_try_pop_eol(pipe))
484 item = dsync_ibc_pipe_pop_item(pipe, ITEM_MAIL);
497 struct dsync_ibc_pipe *pipe = (struct dsync_ibc_pipe *)ibc;
500 item = dsync_ibc_pipe_push_item(pipe->remote, ITEM_FINISH);
511 struct dsync_ibc_pipe *pipe = (struct dsync_ibc_pipe *)ibc;
514 item = dsync_ibc_pipe_pop_item(pipe, ITEM_FINISH);
524 static void pipe_close_mail_streams(struct dsync_ibc_pipe *pipe)
528 if (array_count(&pipe->item_queue) > 0) {
529 item = array_idx_modifiable(&pipe->item_queue, 0);
538 struct dsync_ibc_pipe *pipe = (struct dsync_ibc_pipe *)ibc;
540 pipe_close_mail_streams(pipe);
541 pipe_close_mail_streams(pipe->remote);
575 struct dsync_ibc_pipe *pipe;
577 pipe = i_new(struct dsync_ibc_pipe, 1);
578 pipe->ibc.v = dsync_ibc_pipe_vfuncs;
579 i_array_init(&pipe->pools, 4);
580 i_array_init(&pipe->item_queue, 4);
581 return pipe;