A background saving child (BGSAVE) terminated its work. Handle this. * This function covers the case of RDB -> Slaves socket transfers for * diskless replication. */
| 3619 | * This function covers the case of RDB -> Slaves socket transfers for |
| 3620 | * diskless replication. */ |
| 3621 | static void backgroundSaveDoneHandlerSocket(int exitcode, bool fCancelled) { |
| 3622 | serverAssert(GlobalLocksAcquired()); |
| 3623 | |
| 3624 | if (!fCancelled && exitcode == 0) { |
| 3625 | serverLog(LL_NOTICE, |
| 3626 | "Background RDB transfer terminated with success"); |
| 3627 | } else if (!fCancelled && exitcode != 0) { |
| 3628 | serverLog(LL_WARNING, "Background transfer error"); |
| 3629 | } else { |
| 3630 | serverLog(LL_WARNING, |
| 3631 | "Background transfer terminated cancelled"); |
| 3632 | } |
| 3633 | if (g_pserver->rdb_child_exit_pipe!=-1) |
| 3634 | close(g_pserver->rdb_child_exit_pipe); |
| 3635 | auto pipeT = g_pserver->rdb_pipe_read; |
| 3636 | aePostFunction(g_pserver->rgthreadvar[IDX_EVENT_LOOP_MAIN].el, [pipeT]{ |
| 3637 | aeDeleteFileEvent(serverTL->el, pipeT, AE_READABLE); |
| 3638 | close(pipeT); |
| 3639 | }); |
| 3640 | g_pserver->rdb_child_exit_pipe = -1; |
| 3641 | g_pserver->rdb_pipe_read = -1; |
| 3642 | zfree(g_pserver->rdb_pipe_conns); |
| 3643 | g_pserver->rdb_pipe_conns = NULL; |
| 3644 | g_pserver->rdb_pipe_numconns = 0; |
| 3645 | g_pserver->rdb_pipe_numconns_writing = 0; |
| 3646 | zfree(g_pserver->rdb_pipe_buff); |
| 3647 | g_pserver->rdb_pipe_buff = NULL; |
| 3648 | g_pserver->rdb_pipe_bufflen = 0; |
| 3649 | } |
| 3650 | |
| 3651 | /* When a background RDB saving/transfer terminates, call the right handler. */ |
| 3652 | void backgroundSaveDoneHandler(int exitcode, bool fCancelled) { |
no test coverage detected