Important Update:

- SelectableCore:
  - Simplify Handle AutoManage logic
  - Bug fix: AutoManage fail to open (WaitingToOpen) if no data written
This commit is contained in:
Charl Wentzel
2017-11-29 12:51:29 +02:00
parent 92ce01a3b7
commit 15e6d5a645

View File

@@ -1245,23 +1245,19 @@ bool CSelectableCore::Write( THandle * Handle )
if ((Handle->State == csNone) || (Handle->State == csFailed) || (Handle->State == csClosed)) if ((Handle->State == csNone) || (Handle->State == csFailed) || (Handle->State == csClosed))
{ {
// May it be opened? // May it be opened?
if (Handle && Handle->AutoManage) if (!Handle->AutoManage)
{
// Check duration since last PortIn
if (Timeout( Handle->ReopenStart, Handle->ReopenDelay ))
{
// Complete opening process
if (Open( Handle ) == -1) {
// Reset Timer
SetStartTime( &(Handle->ReopenStart) );
}
}
}
else
{ {
// Must be opened manually // Must be opened manually
return false; return false;
} }
else if (Timeout( Handle->ReopenStart, Handle->ReopenDelay ))
{
// Complete opening process
if (Open( Handle ) == -1) {
// Reset Timer
SetStartTime( &(Handle->ReopenStart) );
}
}
} }
// Log Ready for Write Event // Log Ready for Write Event
@@ -1497,33 +1493,29 @@ int CSelectableCore::InputHandle( THandle * Handle, const char * Data, int Len )
if (Log) Log->Message( LogLevel, dlHigh, "%s: Handle '%s' - Input rejected, Handle not Open (not auto-managed)", Name, Handle->Name ); if (Log) Log->Message( LogLevel, dlHigh, "%s: Handle '%s' - Input rejected, Handle not Open (not auto-managed)", Name, Handle->Name );
return 0; return 0;
} }
else else if (Timeout( Handle->ReopenStart, Handle->ReopenDelay ))
{ {
// Check duration since last PortIn // Complete opening process
if (Timeout( Handle->ReopenStart, Handle->ReopenDelay )) if (Open( Handle ) == -1) {
{ // Reset Timer
// Complete opening process SetStartTime( &(Handle->ReopenStart) );
if (Open( Handle ) == -1) {
// Reset Timer
SetStartTime( &(Handle->ReopenStart) );
}
// Check if Handle is open
if (Handle->State == csWaitingtoOpen) {
if (Log) Log->Message( LogLevel, dlHigh, "%s: Handle '%s' - Input rejected, Waiting to open (auto-managed) Handle", Name, Handle->Name );
return 0;
}
else if (Handle->State != csOpen) {
if (Log) Log->Message( LogLevel, dlHigh, "%s: Handle '%s' - Input rejected, (auto-managed) Handle failed to Open", Name, Handle->Name );
return 0;
}
} }
else
{ // Check if Handle is open
if (Log) Log->Message( LogLevel, dlHigh, "%s: Handle '%s' - Input rejected, Retry (auto-managed) Handle re-open in %d ms", Name, Handle->Name, if (Handle->State == csWaitingtoOpen) {
TimeLeft( Handle->ReopenStart, Handle->ReopenDelay) ); if (Log) Log->Message( LogLevel, dlHigh, "%s: Handle '%s' - Input rejected, Waiting to open (auto-managed) Handle", Name, Handle->Name );
return 0; return 0;
} }
else if (Handle->State != csOpen) {
if (Log) Log->Message( LogLevel, dlHigh, "%s: Handle '%s' - Input rejected, (auto-managed) Handle failed to Open", Name, Handle->Name );
return 0;
}
}
else
{
if (Log) Log->Message( LogLevel, dlHigh, "%s: Handle '%s' - Input rejected, Retry (auto-managed) Handle re-open in %d ms", Name, Handle->Name,
TimeLeft( Handle->ReopenStart, Handle->ReopenDelay) );
return 0;
} }
} }
@@ -1604,7 +1596,7 @@ bool CSelectableCore::Process()
while (Handle) while (Handle)
{ {
// Auto manage handles // Auto manage handles
if (Handle->AutoManage && Handle->Persistent && ((Handle->State == csNone) || (Handle->State == csFailed) || (Handle->State == csClosed))) if ((Handle->State != csOpen) && Handle->AutoManage && Handle->Persistent)
{ {
// Check duration since last PortIn // Check duration since last PortIn
if (Timeout( Handle->ReopenStart, Handle->ReopenDelay )) if (Timeout( Handle->ReopenStart, Handle->ReopenDelay ))