Module Name:    src
Committed By:   dholland
Date:           Wed Jul  3 18:40:33 UTC 2019

Modified Files:
        src/lib/libisns: isns_thread.c

Log Message:
Fix up mangled logic, hopefully. PR 54323 from David Binderman.

XXX: This code is pretty dodgy in general and would benefit from a
XXX: workover by someone who knows what it's supposed to be doing.
XXX: E.g. it appears that a read error will cause an infinite loop...


To generate a diff of this commit:
cvs rdiff -u -r1.1.1.1 -r1.2 src/lib/libisns/isns_thread.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libisns/isns_thread.c
diff -u src/lib/libisns/isns_thread.c:1.1.1.1 src/lib/libisns/isns_thread.c:1.2
--- src/lib/libisns/isns_thread.c:1.1.1.1	Sun Jan 16 01:22:50 2011
+++ src/lib/libisns/isns_thread.c	Wed Jul  3 18:40:33 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: isns_thread.c,v 1.1.1.1 2011/01/16 01:22:50 agc Exp $	*/
+/*	$NetBSD: isns_thread.c,v 1.2 2019/07/03 18:40:33 dholland Exp $	*/
 
 /*-
  * Copyright (c) 2004,2009 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: isns_thread.c,v 1.1.1.1 2011/01/16 01:22:50 agc Exp $");
+__RCSID("$NetBSD: isns_thread.c,v 1.2 2019/07/03 18:40:33 dholland Exp $");
 
 
 /*
@@ -152,12 +152,16 @@ isns_kevent_pipe(struct kevent* evt_p, s
 			DBG("isns_kevent_pipe: ISNS_CMD_ABORT_TRANS\n");
 			rbytes = read(cfg_p->pipe_fds[0], &trans_id,
 			    sizeof(trans_id));
-			if ((rbytes < 0) && (rbytes == sizeof(trans_id)))
-				isns_abort_trans(cfg_p, trans_id);
-			else
+			if (rbytes < 0)
 				DBG("isns_kevent_pipe: "
 				    "error reading trans id\n");
-			pipe_nbytes -= (int)rbytes;
+			else if (rbytes != sizeof(trans_id))
+				DBG("isns_kevent_pipe: "
+				    "short read reading trans id\n");
+			else {
+				isns_abort_trans(cfg_p, trans_id);
+				pipe_nbytes -= (int)rbytes;
+			}
 			break;
 
 		case ISNS_CMD_STOP:

Reply via email to