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);