discuss-gnustep
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

NSData dataWithURL


From: Andreas Fink
Subject: NSData dataWithURL
Date: Tue, 21 Apr 2020 19:14:48 +0200

Hello,

I have a strange behaviour in GNUStep. Before digging deeper, I wanted to know if anyone has a clue.

I have this piece of code:

- (BOOL)updateViaUrl:(NSString *)url /* returns YES on success */
              serial:(NSString *)serial
{
    NSMutableString *full_url = [[NSMutableString alloc]init];
    [full_url appendFormat:@"%@?serial=%@",url,[serial urlencode]];
    NSURL *u = [[NSURL alloc]initWithString:full_url];
    NSError *e= NULL;
    @autoreleasepool
    {
        @try
        {
    #ifdef __APPLE__
            NSData *data = "" style="color: #3900a0" class="">NSData dataWithContentsOfURL:u
                                             options:NSDataReadingUncached
                                               error:&e];
    #else
            NSData *data = "" dataWithContentsOfURL:u];
    #endif
            if((e==0) && (data.length > 0))
            {
                returnValue = YES;
            }
        }
        @catch(NSException *e)
        {
            NSLog(@"Exception while pulling URL %@",full_url);
            returnValue = NO;
        }
    }
    return returnValue;
}


This gets called in a background thread in regular intervalls. Its updating a server with some statistic by pushing some data over https://..

Here's how the process is created:


- (void)runSelectorInBackground:(SEL)aSelector
     withObject:(id)anArgument
{
UMObjectThreadStarter *ts = [[UMObjectThreadStarter alloc]init];
ts.selector = aSelector;
ts.obj      = anArgument;
[NSThread detachNewThreadSelector:@selector(threadStarter:)
toTarget:self
  withObject:ts];
}

(threadStarter: then calls above updateViaURL at some point)


What I have seen is that on gnustep it was producing a crash. This was caused by no autorelease pool being present as it was launched in a background thread.
@autoreleasepool {...}  fixed that crash. (On MacOS X it wasnt crashing).

Now I experience some busyloops in my application _sometimes_ and whenever I load it into the debugger I see that it is in dataWithContentsOfURL: call

To be noted is that the URL called could not be reachable intentionally  (no DNS, firewalls etc) or temporarely (no current coverage, routing issues)

For now I just disabled this code but I wondered if anyone has seen something similar and knows a quick workaround


reply via email to

[Prev in Thread] Current Thread [Next in Thread]