DFC locking for protocol zero only

This commit is contained in:
Douglas Clowes
2012-11-29 11:44:12 +11:00
parent e27b567f9d
commit 6af1da7fb5

23
nread.c
View File

@ -294,15 +294,25 @@ static int NetReadRead(pNetRead self, pNetItem pItem)
*pEnd = '\0'; *pEnd = '\0';
/* do we have something in hold ? */ /* do we have something in hold ? */
if (strlen(pItem->pHold) > 0) { if (strlen(pItem->pHold) > 0) {
strlcat(pItem->pHold, pPtr,511); strlcat(pItem->pHold, pPtr, 511);
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);
if (!iStat) { if (!iStat) {
SCWrite(pItem->pCon, "ERROR: Busy", eError); SCWrite(pItem->pCon, "ERROR: Busy", eError);
} }
pItem->pHold[0] = '\0'; pItem->pHold[0] = '\0';
} else { } else {
/* no, normal command */ /* 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) { if (!iStat) {
SCWrite(pItem->pCon, "ERROR: Busy", eError); SCWrite(pItem->pCon, "ERROR: Busy", eError);
} }
@ -487,7 +497,12 @@ static int TelnetRead(pNetRead self, pNetItem pItem)
break; break;
case '\r': case '\r':
case '\n': 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); */ /* printf("%s\n",pItem->pHold); */
if (!iStat) { if (!iStat) {
SCWrite(pItem->pCon, "ERROR: Busy", eError); SCWrite(pItem->pCon, "ERROR: Busy", eError);