From 6af1da7fb5ab73a1a0b22856ef3d1bd8b49b3cb4 Mon Sep 17 00:00:00 2001 From: Douglas Clowes Date: Thu, 29 Nov 2012 11:44:12 +1100 Subject: [PATCH] DFC locking for protocol zero only --- nread.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/nread.c b/nread.c index a7948974..e0ea5f07 100644 --- a/nread.c +++ b/nread.c @@ -294,15 +294,25 @@ static int NetReadRead(pNetRead self, pNetItem pItem) *pEnd = '\0'; /* do we have something in hold ? */ if (strlen(pItem->pHold) > 0) { - strlcat(pItem->pHold, pPtr,511); - iStat = CostaTop(pItem->pCon->pStack, pItem->pHold); + strlcat(pItem->pHold, pPtr, 511); + /* DFC locking for protocol zero only */ + if (pItem->pCon->iProtocolID == 0 && + CostaLocked(pItem->pCon->pStack)) + iStat = 0; + else + iStat = CostaTop(pItem->pCon->pStack, pItem->pHold); if (!iStat) { SCWrite(pItem->pCon, "ERROR: Busy", eError); } pItem->pHold[0] = '\0'; } else { /* no, normal command */ - iStat = CostaTop(pItem->pCon->pStack, pPtr); + /* DFC locking for protocol zero only */ + if (pItem->pCon->iProtocolID == 0 && + CostaLocked(pItem->pCon->pStack)) + iStat = 0; + else + iStat = CostaTop(pItem->pCon->pStack, pPtr); if (!iStat) { SCWrite(pItem->pCon, "ERROR: Busy", eError); } @@ -487,7 +497,12 @@ static int TelnetRead(pNetRead self, pNetItem pItem) break; case '\r': case '\n': - iStat = CostaTop(pItem->pCon->pStack, pItem->pHold); + /* DFC locking for protocol zero only */ + if (pItem->pCon->iProtocolID == 0 && + CostaLocked(pItem->pCon->pStack)) + iStat = 0; + else + iStat = CostaTop(pItem->pCon->pStack, pItem->pHold); /* printf("%s\n",pItem->pHold); */ if (!iStat) { SCWrite(pItem->pCon, "ERROR: Busy", eError);