From a9b6d328823abaea1b94af95866fbe4eccdd8960 Mon Sep 17 00:00:00 2001 From: Ken Brown Date: Sat, 22 Jun 2019 11:46:49 -0400 Subject: [PATCH] Cygwin: FIFO: add some error checking Change the return type of fhandler_fifo::delete_client_handler from void to int so that we can report errors. --- winsup/cygwin/fhandler.h | 2 +- winsup/cygwin/fhandler_fifo.cc | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h index f244f3486..156baed9c 100644 --- a/winsup/cygwin/fhandler.h +++ b/winsup/cygwin/fhandler.h @@ -1271,7 +1271,7 @@ class fhandler_fifo: public fhandler_base HANDLE create_pipe_instance (bool); NTSTATUS open_pipe (HANDLE&); int add_client_handler (); - void delete_client_handler (int); + int delete_client_handler (int); bool listen_client (); int stop_listen_client (); int check_listen_client_thread (); diff --git a/winsup/cygwin/fhandler_fifo.cc b/winsup/cygwin/fhandler_fifo.cc index f63787f57..4568ea080 100644 --- a/winsup/cygwin/fhandler_fifo.cc +++ b/winsup/cygwin/fhandler_fifo.cc @@ -257,13 +257,14 @@ out: return ret; } -void +int fhandler_fifo::delete_client_handler (int i) { - fc_handler[i].close (); + int ret = fc_handler[i].close (); if (i < --nhandlers) memmove (fc_handler + i, fc_handler + i + 1, (nhandlers - i) * sizeof (fc_handler[i])); + return ret; } /* Just hop to the listen_client_thread method. */ @@ -324,7 +325,13 @@ fhandler_fifo::listen_client_thread () while (i < nhandlers) { if (fc_handler[i].state == fc_invalid) - delete_client_handler (i); + { + if (delete_client_handler (i) < 0) + { + fifo_client_unlock (); + goto out; + } + } else i++; } -- 2.43.5