char *oldData = mceP->data;
mceP->data = afs_osi_Alloc(size + offset);
+ if (mceP->data == NULL) { /* no available memory */
+ mceP->data = oldData; /* revert back change that was made */
+ MReleaseWriteLock(&mceP->afs_memLock);
+ afs_warn("afs: afs_MemWriteBlk mem alloc failure (%d bytes)\n",
+ size + offset);
+ return -ENOMEM;
+ }
/* may overlap, but this is OK */
AFS_GUNLOCK();
char *oldData = mceP->data;
mceP->data = afs_osi_Alloc(AFS_UIO_RESID(uioP) + AFS_UIO_OFFSET(uioP));
+ if (mceP->data == NULL) { /* no available memory */
+ mceP->data = oldData; /* revert back change that was made */
+ MReleaseWriteLock(&mceP->afs_memLock);
+ afs_warn("afs: afs_MemWriteBlk mem alloc failure (%d bytes)\n",
+ AFS_UIO_RESID(uioP) + AFS_UIO_OFFSET(uioP));
+ return -ENOMEM;
+ }
AFS_GUNLOCK();
memcpy(mceP->data, oldData, mceP->size);
MObtainWriteLock(&mceP->afs_memLock, 313);
/* old directory entry; g.c. */
if (size == 0 && mceP->dataSize > memCacheBlkSize) {
- afs_osi_Free(mceP->data, mceP->dataSize);
+ char *oldData = mceP->data;
mceP->data = afs_osi_Alloc(memCacheBlkSize);
- mceP->dataSize = memCacheBlkSize;
+ if (mceP->data == NULL) { /* no available memory */
+ mceP->data = oldData;
+ MReleaseWriteLock(&mceP->afs_memLock);
+ afs_warn("afs: afs_MemWriteBlk mem alloc failure (%d bytes)\n",
+ memCacheBlkSize);
+ } else {
+ afs_osi_Free(oldData, mceP->dataSize);
+ mceP->dataSize = memCacheBlkSize;
+ }
}
if (size < mceP->size)