@@ -452,18 +452,21 @@ void services_monitor_start(struct service_list *service_list)
452
452
return ;
453
453
service_anvil_monitor_start (service_list );
454
454
455
- if (pipe (service_list -> master_dead_pipe_fd ) < 0 )
456
- i_error ("pipe() failed: %m" );
457
- fd_close_on_exec (service_list -> master_dead_pipe_fd [0 ], TRUE);
458
- fd_close_on_exec (service_list -> master_dead_pipe_fd [1 ], TRUE);
459
-
460
455
array_foreach (& service_list -> services , services ) {
461
456
struct service * service = * services ;
462
457
463
458
if (service -> type == SERVICE_TYPE_LOGIN ) {
464
459
if (service_login_create_notify_fd (service ) < 0 )
465
460
continue ;
466
461
}
462
+ if (service -> master_dead_pipe_fd [0 ] == -1 ) {
463
+ if (pipe (service -> master_dead_pipe_fd ) < 0 ) {
464
+ service_error (service , "pipe() failed: %m" );
465
+ continue ;
466
+ }
467
+ fd_close_on_exec (service -> master_dead_pipe_fd [0 ], TRUE);
468
+ fd_close_on_exec (service -> master_dead_pipe_fd [1 ], TRUE);
469
+ }
467
470
if (service -> status_fd [0 ] == -1 ) {
468
471
/* we haven't yet created status pipe */
469
472
if (pipe (service -> status_fd ) < 0 ) {
@@ -519,6 +522,10 @@ void service_monitor_stop(struct service *service)
519
522
service -> status_fd [i ] = -1 ;
520
523
}
521
524
}
525
+ if (service -> master_dead_pipe_fd [0 ] != -1 ) {
526
+ i_close_fd (& service -> master_dead_pipe_fd [0 ]);
527
+ i_close_fd (& service -> master_dead_pipe_fd [1 ]);
528
+ }
522
529
if (service -> login_notify_fd != -1 ) {
523
530
if (close (service -> login_notify_fd ) < 0 ) {
524
531
service_error (service ,
@@ -561,15 +568,6 @@ void services_monitor_stop(struct service_list *service_list, bool wait)
561
568
{
562
569
struct service * const * services ;
563
570
564
- if (service_list -> master_dead_pipe_fd [0 ] != -1 ) {
565
- if (close (service_list -> master_dead_pipe_fd [0 ]) < 0 )
566
- i_error ("close(master dead pipe) failed: %m" );
567
- if (close (service_list -> master_dead_pipe_fd [1 ]) < 0 )
568
- i_error ("close(master dead pipe) failed: %m" );
569
- service_list -> master_dead_pipe_fd [0 ] = -1 ;
570
- service_list -> master_dead_pipe_fd [1 ] = -1 ;
571
- }
572
-
573
571
if (wait ) {
574
572
/* we've notified all children that the master is dead.
575
573
now wait for the children to either die or to tell that
0 commit comments