FIXES 43551
kreltime-guard-against-null-tm-20060731 was apparently an
attempt to deal with the possibility of localtime() returning NULL by
using localtime_r instead, and zeroing the tm structure first. This has
two problems. First, localtime_r is not guaranteed to leave its output
buffer untouched or in a sane state in the event it is given invalid
input. More importantly, the second half of this delta fixed the build
on Windows (which apparently lacks localtime_r) at the expense of using
the wrong level of indirection on other platforms.
Simple is nice, but correct is important too. There is nothing wrong
with switching to localtime_r to avoid thread safety issues. However,
the correct fix for the anticipated problem was and is to check the
return value of localtime (or localtime_r), and if it is NULL, fill in
the ktime_date with suitable default values.
The attached patch does not implement the correct fix, but does fix the
double-indirection problem, so butc will again perform correctly instead
of crashing.
* don't DebugBreak unless a debugger is attached
* replace afsdcell.ini with CellServDB in error message
* do not NetBIOS Reset adapters when checking to see if only the loopback
is in use because doing so breaks the existing LANA bind
* remove a deadlock in smb3.c
* do not retry dirty buffer writes when flushing in response to a suspend
* do not flush in response to a suspend when only the loopback is present
fixup build dependencies for afsp_version.h
====================
This delta was composed from multiple commits as part of the CVS->Git migration.
The checkin message with each commit was inconsistent.
The following are the additional commit messages.
====================
fixup copyrights
afsp_version.h is auto-generated
====================
This delta was composed from multiple commits as part of the CVS->Git migration.
The checkin message with each commit was inconsistent.
The following are the additional commit messages.
====================
fix product version generation
FIXES 42312
iafs_InactiveVCache() calls afs_InvalidateAllSegments() which says
it should be called with the vnode locked. so the lock should
probably be moved to afs_InactiveVCache() so it can be droppped
before calling afs_remunlink().
#ifdef DEBUG_REFCOUNT the ref count log entries so they aren't always
compiled in
comment out the remaining location where the write lock on cm_scacheLock
is dropped in order to obtain the scache mutex on the object returned
from cm_GetNewSCache(). Dropping the lock results in more than one
thread being given the same cm_scache_t which is more dangerous than
blowing away the contents of the object without holding the mutex
ensure that cm_BufWrite is always called with a non-NULL scp. Add
an assertion to double check that we do it all the time.
replace all DebugBreak() calls with osi_panic.
remove calls to cm_RecycleSCache from VNOVNODE handler as its not
lock safe to drop and re-obtain locks to adhere to the locking
hierarchy
restore reference to CM_SCACHESYNC_STOREDATA that should
not have been removed.
remove attempts to adhere to locking hierarching from cm_GetNewSCache.
dropping the cm_scacheLock is too dangerous
add a check to ensure that the scache refcount is not zero if there
is a valid smb_fid_t pointing to it.
more debug logging
still tracking down issues when large numbers of temporary files
are created and deleted in the same directory from multiple
machines.
VNOVNODE must return CM_ERROR_BADFD
ensure that all calls to cm_GetCallback are made from cm_SyncOp.
add CM_SCACHESYNC_FORCECB logic to cm_SyncOp so that it can be
removed from cm_GetAccess
don't mix CM_SCACHESYNC_NEEDCALLBACK with CM_SCACHESYNC_STOREDATA
or CM_SCACHESYNC_FETCHDATA
more cleanup from recent patches. comment out the recycling code because
it is not possible to implement it using the current locking hierarchy.
change cm_BufWrite to take a pointer to cm_scache_t instead of a fid
which must be used to look up a new reference to the cm_scache_t.
more often than not we already have the scp and in the one case we
don't we can let the caller look up the scp and then call cm_BufWrite
if it is found. If not, we have saved a function call and a bunch
of lock operations.
add a lot more logging.
improve the scp mutex handling within smb_CloseFID