Author: rfm
Date: Tue Jun 21 19:47:15 2016
New Revision: 39900
URL: http://svn.gna.org/viewcvs/gnustep?rev=39900&view=rev
Log:
Only allow observers to be added from one runloop/thread at a time.
Modified:
libs/sqlclient/trunk/Postgres.m
Modified: libs/sqlclient/trunk/Postgres.m
URL:
http://svn.gna.org/viewcvs/gnustep/libs/sqlclient/trunk/Postgres.m?rev=39900&r1=39899&r2=39900&view=diff
==============================================================================
--- libs/sqlclient/trunk/Postgres.m (original)
+++ libs/sqlclient/trunk/Postgres.m Tue Jun 21 19:47:15 2016
@@ -510,12 +510,15 @@
if (extra != 0 && connection != 0)
{
#if defined(GNUSTEP_BASE_LIBRARY) && !defined(__MINGW__)
- if (runLoop != nil)
- {
- [runLoop removeEvent: (void*)(uintptr_t)PQsocket(connection)
- type: ET_RDESC
- forMode: NSDefaultRunLoopMode
- all: YES];
+ if (extra != 0 && runLoop != nil)
+ {
+ if (connection != 0)
+ {
+ [runLoop removeEvent: (void*)(uintptr_t)PQsocket(connection)
+ type: ET_RDESC
+ forMode: NSDefaultRunLoopMode
+ all: YES];
+ }
DESTROY(runLoop);
}
#endif
@@ -730,9 +733,17 @@
{
[self execute: @"LISTEN ", name, nil];
#if defined(GNUSTEP_BASE_LIBRARY) && !defined(__MINGW__)
- if (nil == runLoop && 0 != connection)
- {
- ASSIGN(runLoop, [NSRunLoop currentRunLoop]);
+ if (extra != 0 && connection != 0)
+ {
+ if (nil == runLoop)
+ {
+ ASSIGN(runLoop, [NSRunLoop currentRunLoop]);
+ }
+ else if ([NSRunLoop currentRunLoop] != runLoop)
+ {
+ [NSException raise: NSInternalInconsistencyException
+ format: @"Observer added to the same client from another runloop"];
+ }
[runLoop addEvent: (void*)(uintptr_t)PQsocket(connection)
type: ET_RDESC
watcher: self
@@ -1209,12 +1220,15 @@
- (void) backendUnlisten: (NSString*)name
{
#if defined(GNUSTEP_BASE_LIBRARY) && !defined(__MINGW__)
- if (runLoop != nil)
- {
- [runLoop removeEvent: (void*)(uintptr_t)PQsocket(connection)
- type: ET_RDESC
- forMode: NSDefaultRunLoopMode
- all: YES];
+ if (extra != 0 && runLoop != nil)
+ {
+ if (connection != 0)
+ {
+ [runLoop removeEvent: (void*)(uintptr_t)PQsocket(connection)
+ type: ET_RDESC
+ forMode: NSDefaultRunLoopMode
+ all: YES];
+ }
DESTROY(runLoop);
}
#endif
_______________________________________________
Gnustep-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs