if (code == 0) { /* got cell from DNS */
lock_ObtainMutex(&cp->mx);
mxheld = 1;
- cp->flags |= CM_CELLFLAG_DNS;
- cp->flags &= ~CM_CELLFLAG_VLSERVER_INVALID;
+ _InterlockedOr(&cp->flags, CM_CELLFLAG_DNS);
+ _InterlockedAnd(&cp->flags, ~CM_CELLFLAG_VLSERVER_INVALID);
cp->timeout = time(0) + ttl;
#ifdef DEBUG
fprintf(stderr, "cell %s: ttl=%d\n", cp->name, ttl);
*/
lock_ObtainMutex(&cp->mx);
mxheld = 1;
- cp->flags |= CM_CELLFLAG_VLSERVER_INVALID;
+ _InterlockedOr(&cp->flags, CM_CELLFLAG_VLSERVER_INVALID);
}
}
}
} else { /* got cell from DNS */
lock_ObtainMutex(&cp->mx);
hasMutex = 1;
- cp->flags |= CM_CELLFLAG_DNS;
- cp->flags &= ~CM_CELLFLAG_VLSERVER_INVALID;
+ _InterlockedOr(&cp->flags, CM_CELLFLAG_DNS);
+ _InterlockedAnd(&cp->flags, ~CM_CELLFLAG_VLSERVER_INVALID);
cp->timeout = time(0) + ttl;
}
}
cellp->cellID = AFS_FAKE_ROOT_CELL_ID;
cellp->vlServersp = NULL;
- cellp->flags = CM_CELLFLAG_FREELANCE;
+ _InterlockedOr(&cellp->flags, CM_CELLFLAG_FREELANCE);
cm_AddCellToNameHashTable(cellp);
cm_AddCellToIDHashTable(cellp);
for (cellp = cm_data.allCellsp; cellp; cellp=cellp->allNextp) {
lock_InitializeMutex(&cellp->mx, "cm_cell_t mutex", LOCK_HIERARCHY_CELL);
cellp->vlServersp = NULL;
- cellp->flags |= CM_CELLFLAG_VLSERVER_INVALID;
+ _InterlockedOr(&cellp->flags, CM_CELLFLAG_VLSERVER_INVALID);
}
lock_ReleaseRead(&cm_cellLock);
}
cellp->nameNextp = cm_data.cellNameHashTablep[i];
cm_data.cellNameHashTablep[i] = cellp;
- cellp->flags |= CM_CELLFLAG_IN_NAMEHASH;
+ _InterlockedOr(&cellp->flags, CM_CELLFLAG_IN_NAMEHASH);
}
/* call with cell write-locked and mutex held */
lcellpp = &tcellp->nameNextp, tcellp = tcellp->nameNextp) {
if (tcellp == cellp) {
*lcellpp = cellp->nameNextp;
- cellp->flags &= ~CM_CELLFLAG_IN_NAMEHASH;
+ _InterlockedAnd(&cellp->flags, ~CM_CELLFLAG_IN_NAMEHASH);
cellp->nameNextp = NULL;
break;
}
cellp->idNextp = cm_data.cellIDHashTablep[i];
cm_data.cellIDHashTablep[i] = cellp;
- cellp->flags |= CM_CELLFLAG_IN_IDHASH;
+ _InterlockedOr(&cellp->flags, CM_CELLFLAG_IN_IDHASH);
}
/* call with cell write-locked and mutex held */
lcellpp = &tcellp->idNextp, tcellp = tcellp->idNextp) {
if (tcellp == cellp) {
*lcellpp = cellp->idNextp;
- cellp->flags &= ~CM_CELLFLAG_IN_IDHASH;
+ _InterlockedAnd(&cellp->flags, ~CM_CELLFLAG_IN_IDHASH);
cellp->idNextp = NULL;
break;
}
}
}
lock_ObtainMutex(&rock.cellp->mx);
- rock.cellp->flags &= ~CM_CELLFLAG_DNS;
+ _InterlockedAnd(&rock.cellp->flags, ~CM_CELLFLAG_DNS);
} else if (cm_dnsEnabled) {
int ttl;
code = cm_SearchCellByDNS(rock.cellp->name, NULL, &ttl, cm_AddCellProc, &rock);
lock_ObtainMutex(&rock.cellp->mx);
if (code == 0) { /* got cell from DNS */
- rock.cellp->flags |= CM_CELLFLAG_DNS;
+ _InterlockedOr(&rock.cellp->flags, CM_CELLFLAG_DNS);
rock.cellp->timeout = time(0) + ttl;
#ifdef DEBUG
fprintf(stderr, "cell %s: ttl=%d\n", rock.cellp->name, ttl);
lock_ObtainMutex(&rock.cellp->mx);
rock.cellp->flags &= ~CM_CELLFLAG_DNS;
}
- rock.cellp->flags |= CM_CELLFLAG_VLSERVER_INVALID;
+ _InterlockedOr(&rock.cellp->flags, CM_CELLFLAG_VLSERVER_INVALID);
StringCbCopy(rock.cellp->linkedName, CELL_MAXNAMELEN, linked_cellname);
lock_ReleaseMutex(&rock.cellp->mx);