/* if timeout - check that it did not exceed the HardDead timeout
* and retry */
- /* timeleft - get if from reqp the same way as cmXonnByMServers does */
+ /* timeleft - get it from reqp the same way as cm_ConnByMServers does */
timeUsed = (GetTickCount() - reqp->startTime) / 1000;
-
- /* leave 5 seconds margin for sleep */
- if (reqp->flags & CM_REQ_NORETRY)
- timeLeft = 0;
- else
- timeLeft = HardDeadtimeout - timeUsed;
+ timeLeft = HardDeadtimeout - timeUsed;
/* get a pointer to the cell */
if (errorCode) {
}
else if (errorCode >= -64 && errorCode < 0) {
/* mark server as down */
- sprintf(addr, "%d.%d.%d.%d",
- ((serverp->addr.sin_addr.s_addr & 0xff)),
- ((serverp->addr.sin_addr.s_addr & 0xff00)>> 8),
- ((serverp->addr.sin_addr.s_addr & 0xff0000)>> 16),
- ((serverp->addr.sin_addr.s_addr & 0xff000000)>> 24));
+ if (serverp)
+ sprintf(addr, "%d.%d.%d.%d",
+ ((serverp->addr.sin_addr.s_addr & 0xff)),
+ ((serverp->addr.sin_addr.s_addr & 0xff00)>> 8),
+ ((serverp->addr.sin_addr.s_addr & 0xff0000)>> 16),
+ ((serverp->addr.sin_addr.s_addr & 0xff000000)>> 24));
if (errorCode == RX_CALL_DEAD)
osi_Log2(afsd_logp, "cm_Analyze: Rx Call Dead addr[%s] forcedNew[%s]",
osi_LogSaveString(afsd_logp,addr),
(reqp->flags & CM_REQ_NEW_CONN_FORCED ? "yes" : "no"));
- lock_ObtainMutex(&serverp->mx);
- if (errorCode == RX_CALL_DEAD &&
- (reqp->flags & CM_REQ_NEW_CONN_FORCED)) {
- if (!(serverp->flags & CM_SERVERFLAG_DOWN)) {
- serverp->flags |= CM_SERVERFLAG_DOWN;
- serverp->downTime = time(NULL);
- }
- } else {
- if (reqp->flags & CM_REQ_NEW_CONN_FORCED) {
- reqp->tokenIdleErrorServp = serverp;
- reqp->tokenError = errorCode;
+ if (serverp) {
+ lock_ObtainMutex(&serverp->mx);
+ if (errorCode == RX_CALL_DEAD &&
+ (reqp->flags & CM_REQ_NEW_CONN_FORCED)) {
+ if (!(serverp->flags & CM_SERVERFLAG_DOWN)) {
+ serverp->flags |= CM_SERVERFLAG_DOWN;
+ serverp->downTime = time(NULL);
+ }
} else {
- reqp->flags |= CM_REQ_NEW_CONN_FORCED;
- forcing_new = 1;
+ if (reqp->flags & CM_REQ_NEW_CONN_FORCED) {
+ reqp->tokenIdleErrorServp = serverp;
+ reqp->tokenError = errorCode;
+ } else {
+ reqp->flags |= CM_REQ_NEW_CONN_FORCED;
+ forcing_new = 1;
+ }
}
- }
- lock_ReleaseMutex(&serverp->mx);
- cm_ForceNewConnections(serverp);
+ lock_ReleaseMutex(&serverp->mx);
+ cm_ForceNewConnections(serverp);
+ }
if ( timeLeft > 2 )
retry = 1;
}
int secIndex;
struct rx_securityClass *secObjp;
- if (serverp->type == CM_SERVER_VLDB) {
- port = htons(7003);
+ port = serverp->addr.sin_port;
+ switch (serverp->type) {
+ case CM_SERVER_VLDB:
+ if (port == 0)
+ port = htons(7003);
serviceID = 52;
- }
- else {
- osi_assertx(serverp->type == CM_SERVER_FILE, "incorrect server type");
- port = htons(7000);
+ break;
+ case CM_SERVER_FILE:
+ if (port == 0)
+ port = htons(7000);
serviceID = 1;
+ break;
+ default:
+ osi_panic("unknown server type", __FILE__, __LINE__);
}
+
if (ucellp->flags & CM_UCELLFLAG_RXKAD) {
secIndex = 2;
switch (cryptall) {
}
osi_assertx(secObjp != NULL, "null rx_securityClass");
tcp->rxconnp = rx_NewConnection(serverp->addr.sin_addr.s_addr,
- port,
- serviceID,
- secObjp,
- secIndex);
+ port,
+ serviceID,
+ secObjp,
+ secIndex);
rx_SetConnDeadTime(tcp->rxconnp, ConnDeadtimeout);
rx_SetConnHardDeadTime(tcp->rxconnp, HardDeadtimeout);
rx_SetConnIdleDeadTime(tcp->rxconnp, IdleDeadtimeout);