Important Update:
- SelectableCore: - Simplify Handle AutoManage logic - Bug fix: AutoManage fail to open (WaitingToOpen) if no data written
This commit is contained in:
@@ -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 ))
|
||||||
|
|||||||
Reference in New Issue
Block a user