From: Jeffrey Altman Date: Sat, 2 Feb 2008 22:25:40 +0000 (+0000) Subject: windows-vista-resume-smb-binding-20080202 X-Git-Tag: BP-openafs-windows-kdfs-ifs~152 X-Git-Url: https://git.openafs.org/?p=openafs.git;a=commitdiff_plain;h=270cb6a9c9903d92b9b6276a542968667056066a windows-vista-resume-smb-binding-20080202 LICENSE MIT another plane trip, more tweaks to the logic for handling re-binding of the netbios name after a power management resume event. --- diff --git a/src/WINNT/afsd/afsd_service.c b/src/WINNT/afsd/afsd_service.c index ac58d2a..e0d3576 100644 --- a/src/WINNT/afsd/afsd_service.c +++ b/src/WINNT/afsd/afsd_service.c @@ -393,8 +393,9 @@ afsd_ServiceControlHandlerEx( /* This is the message delivered once all devices are up */ afsi_log("SERVICE_CONTROL_APMRESUMEAUTOMATIC"); powerStateSuspended = 0; - if (osVersion.dwMajorVersion >= 6) - smb_RestartListeners(0); + if (osVersion.dwMajorVersion >= 6) { + smb_SetLanAdapterChangeDetected(); + } dwRet = NO_ERROR; break; default: diff --git a/src/WINNT/afsd/smb.c b/src/WINNT/afsd/smb.c index ddd0741..f3c1e1c 100644 --- a/src/WINNT/afsd/smb.c +++ b/src/WINNT/afsd/smb.c @@ -8349,9 +8349,31 @@ exit_thread: return; } +static void +smb_LanAdapterChangeThread(void *param) +{ + /* + * Give the IPAddrDaemon thread a chance + * to block before we trigger. + */ + Sleep(30000); + smb_LanAdapterChange(0); +} + void smb_SetLanAdapterChangeDetected(void) { + int lpid; + thread_t phandle; + lock_ObtainMutex(&smb_StartedLock); + + if (!powerStateSuspended) { + phandle = thrd_Create(NULL, 65536, (ThreadFunc) smb_LanAdapterChangeThread, + NULL, 0, &lpid, "smb_LanAdapterChange"); + osi_assertx(phandle != NULL, "smb_LanAdapterChangeThread thread creation failure"); + thrd_CloseHandle(phandle); + } + smb_LanAdapterChangeDetected = 1; lock_ReleaseMutex(&smb_StartedLock); } @@ -8635,6 +8657,9 @@ void smb_RestartListeners(int locked) if (!locked) lock_ObtainMutex(&smb_StartedLock); + if (powerStateSuspended) + afsi_log("smb_RestartListeners called while suspended"); + if (!powerStateSuspended && smb_ListenerState != SMB_LISTENER_UNINITIALIZED) { if (smb_ListenerState == SMB_LISTENER_STOPPED) { if (smb_NetbiosInit(1))