ref: 89625510554e65ec088110195670092bfe95fea4
parent: dbf13129a702cc066517acf147fb01c13df456cb
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Sun Apr 22 14:50:11 EDT 2018
devip: increment in counter *AFTER* acquiering the ifc lock or loopbackmedium
--- a/sys/src/9/ip/loopbackmedium.c
+++ b/sys/src/9/ip/loopbackmedium.c
@@ -75,7 +75,7 @@
lb = ifc->arg;
lb->readp = up; /* hide identity under a rock for unbind */
if(waserror()){
- lb->readp = 0;
+ lb->readp = nil;
pexit("hangup", 1);
}
for(;;){
@@ -82,7 +82,6 @@
bp = qbread(lb->q, Maxtu);
if(bp == nil)
continue;
- ifc->in++;
if(!canrlock(ifc)){
freeb(bp);
continue;
@@ -91,6 +90,7 @@
runlock(ifc);
nexterror();
}
+ ifc->in++;
if(ifc->lifc == nil)
freeb(bp);
else
--- a/sys/src/9/ip/netdevmedium.c
+++ b/sys/src/9/ip/netdevmedium.c
@@ -117,7 +117,6 @@
/*
* get here if mchan is a pipe and other side hangs up
* clean up this interface & get out
-ZZZ is this a good idea?
*/
poperror();
er->readp = nil;