mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-25 09:41:15 +00:00
Fix a bug whereby the singleton NSFileHandle instances (stdin, stdout, stderr) are autoreleased and become dangling pointers on exit.
Reported on Stack Overflow: http://stackoverflow.com/questions/19389749/why-gnustep-nsrunloop-quits-immediately-with-arc git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@37245 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
bc968c5a9f
commit
a725079d00
2 changed files with 19 additions and 3 deletions
|
@ -964,7 +964,7 @@ NSString * const GSSOCKSRecvAddr = @"GSSOCKSRecvAddr";
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
self = [self initWithFileDescriptor: 2 closeOnDealloc: NO];
|
self = [self initWithFileDescriptor: 2 closeOnDealloc: NO];
|
||||||
fh_stderr = self;
|
ASSIGN(fh_stderr, self);
|
||||||
if (self)
|
if (self)
|
||||||
{
|
{
|
||||||
readOK = NO;
|
readOK = NO;
|
||||||
|
@ -982,7 +982,7 @@ NSString * const GSSOCKSRecvAddr = @"GSSOCKSRecvAddr";
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
self = [self initWithFileDescriptor: 0 closeOnDealloc: NO];
|
self = [self initWithFileDescriptor: 0 closeOnDealloc: NO];
|
||||||
fh_stdin = self;
|
ASSIGN(fh_stdin, self);
|
||||||
if (self)
|
if (self)
|
||||||
{
|
{
|
||||||
writeOK = NO;
|
writeOK = NO;
|
||||||
|
@ -1000,7 +1000,7 @@ NSString * const GSSOCKSRecvAddr = @"GSSOCKSRecvAddr";
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
self = [self initWithFileDescriptor: 1 closeOnDealloc: NO];
|
self = [self initWithFileDescriptor: 1 closeOnDealloc: NO];
|
||||||
fh_stdout = self;
|
ASSIGN(fh_stdout, self);
|
||||||
if (self)
|
if (self)
|
||||||
{
|
{
|
||||||
readOK = NO;
|
readOK = NO;
|
||||||
|
|
16
Tests/base/NSFileHandle/singleton.m
Normal file
16
Tests/base/NSFileHandle/singleton.m
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
id a,b,c;
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
NSAutoreleasePool *p = [NSAutoreleasePool new];
|
||||||
|
NSZombieEnabled = YES;
|
||||||
|
a = [NSFileHandle fileHandleWithStandardInput];
|
||||||
|
b = [NSFileHandle fileHandleWithStandardOutput];
|
||||||
|
c = [NSFileHandle fileHandleWithStandardError];
|
||||||
|
[p drain];
|
||||||
|
assert(0 != [a description]);
|
||||||
|
assert(0 != [b description]);
|
||||||
|
assert(0 != [c description]);
|
||||||
|
}
|
Loading…
Reference in a new issue