Author: rfm
Date: Sat Jun 18 08:42:12 2016
New Revision: 39875
URL: http://svn.gna.org/viewcvs/gnustep?rev=39875&view=rev
Log:
Unchedule I/O events when entering an error state
Modified:
libs/base/trunk/Source/GSStream.h
libs/base/trunk/Source/GSStream.m
Modified: libs/base/trunk/Source/GSStream.h
URL:
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/Source/GSStream.h?rev=39875&r1=39874&r2=39875&view=diff
==============================================================================
--- libs/base/trunk/Source/GSStream.h (original)
+++ libs/base/trunk/Source/GSStream.h Sat Jun 18 08:42:12 2016
@@ -75,7 +75,7 @@
{ \
id _delegate; /* Delegate controls operation. */\
NSMutableDictionary *_properties; /* storage for properties */\
- BOOL _delegateValid;/* whether the delegate responds*/\
+ BOOL _delegateValid; /* whether the delegate responds*/\
NSError *_lastError; /* last error occured */\
NSStreamStatus _currentStatus;/* current status */\
NSMapTable *_loops; /* Run loops and their modes. */\
Modified: libs/base/trunk/Source/GSStream.m
URL:
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/Source/GSStream.m?rev=39875&r1=39874&r2=39875&view=diff
==============================================================================
--- libs/base/trunk/Source/GSStream.m (original)
+++ libs/base/trunk/Source/GSStream.m Sat Jun 18 08:42:12 2016
@@ -407,7 +407,7 @@
{
NSDebugMLLog(@"NSStream", @"record error: %@ - %@", self, anError);
ASSIGN(_lastError, anError);
- _currentStatus = NSStreamStatusError;
+ [self _setStatus: NSStreamStatusError];
}
- (void) _resetEvents: (NSUInteger)mask
@@ -533,7 +533,22 @@
- (void) _setStatus: (NSStreamStatus)newStatus
{
- _currentStatus = newStatus;
+ if (_currentStatus != newStatus)
+ {
+ if (NSStreamStatusError == newStatus && NSCountMapTable(_loops) > 0)
+ {
+ /* After an error, we are in the run loops only to trigger
+ * errors, not for I/O, sop we must re-schedule in the right mode.
+ */
+ [self _unschedule];
+ _currentStatus = newStatus;
+ [self _schedule];
+ }
+ else
+ {
+ _currentStatus = newStatus;
+ }
+ }
}
- (BOOL) _unhandledData
_______________________________________________
Gnustep-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs