From 5cf76eb8f489f6c4d1ba76bf6fe782c3cf45803d Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Sat, 21 Jul 2012 11:36:18 -0700 Subject: Refactor fd closing into CloseFD helper function All versions now perform same check for XtransConn data to decide whether to use _X11TransClose or regular close, which is needed for being able to read data from pre-recorded files instead of live sockets. Signed-off-by: Alan Coopersmith Reviewed-by: Mark Kettenis --- fd.c | 23 +++++++++++++++++------ fd.h | 1 + scope.c | 12 +++--------- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/fd.c b/fd.c index 4ee9a3e..8ac3e89 100644 --- a/fd.c +++ b/fd.c @@ -198,20 +198,31 @@ GetXTransConnInfo(FD fd) /* ************************************************************ */ -static void -EOFonFD(FD fd) +void +CloseFD(FD fd) { - enterprocedure("EOFonFD"); - debug(128, (stderr, "EOF on %d\n", fd)); #ifdef USE_XTRANS - if (FDD[fd].trans_conn) - _X11TransClose(FDD[fd].trans_conn); + XtransConnInfo conn = GetXTransConnInfo(fd); + + if (conn) + _X11TransClose(conn); else #endif close(fd); + NotUsingFD(fd); } +/* ************************************************************ */ + +static void +EOFonFD(FD fd) +{ + enterprocedure("EOFonFD"); + debug(128, (stderr, "EOF on %d\n", fd)); + CloseFD(fd); +} + FD AcceptConnection(FD ConnectionSocket) { diff --git a/fd.h b/fd.h index 85cdd25..59b4889 100644 --- a/fd.h +++ b/fd.h @@ -87,6 +87,7 @@ extern fd_set BlockedReadDescriptors; /* bit map of FD's blocked from reading extern int HighestFD; /* highest FD in use -- for select */ extern void InitializeFD(void); +extern void CloseFD(FD fd); extern void UsingFD(FD fd, void (*Handler) (int), void (*FlushHandler) (int), XtransConnInfo trans_conn); diff --git a/scope.c b/scope.c index 89049aa..1234f82 100644 --- a/scope.c +++ b/scope.c @@ -956,15 +956,9 @@ CloseConnection(FD fd) StopClientConnection(ServerHalf(fd)); StopServerConnection(ClientHalf(fd)); -#ifdef USE_XTRANS - _X11TransClose(GetXTransConnInfo(fd)); - _X11TransClose(GetXTransConnInfo(FDPair(fd))); -#else - close(fd); - close(FDPair(fd)); -#endif - NotUsingFD(fd); - NotUsingFD(FDPair(fd)); + CloseFD(fd); + CloseFD(FDPair(fd)); + if (TerminateClose) exit(0); } -- cgit v1.2.1