Skip to content
This repository was archived by the owner on Mar 16, 2019. It is now read-only.

Commit c1fcd8a

Browse files
committed
Remove WIP code which causes memory leaks.
1 parent f3a151c commit c1fcd8a

File tree

5 files changed

+47
-35
lines changed

5 files changed

+47
-35
lines changed

src/ios/RNFetchBlob.xcodeproj/project.pbxproj

+2
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,7 @@
233233
isa = XCBuildConfiguration;
234234
buildSettings = {
235235
ALWAYS_SEARCH_USER_PATHS = NO;
236+
GCC_INPUT_FILETYPE = automatic;
236237
HEADER_SEARCH_PATHS = (
237238
"$(inherited)",
238239
"$(SRCROOT)/Libraries/**",
@@ -253,6 +254,7 @@
253254
isa = XCBuildConfiguration;
254255
buildSettings = {
255256
ALWAYS_SEARCH_USER_PATHS = NO;
257+
GCC_INPUT_FILETYPE = automatic;
256258
HEADER_SEARCH_PATHS = (
257259
"$(inherited)",
258260
"$(SRCROOT)/Libraries/**",

src/ios/RNFetchBlob/RNFetchBlob.m

+2
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ - (NSDictionary *)constantsToExport
130130
// send HTTP request
131131
RNFetchBlobNetwork * utils = [[RNFetchBlobNetwork alloc] init];
132132
[utils sendRequest:options bridge:self.bridge taskId:taskId withRequest:request callback:callback];
133+
utils = nil;
133134
});
134135
}
135136

@@ -178,6 +179,7 @@ - (NSDictionary *)constantsToExport
178179
// send HTTP request
179180
RNFetchBlobNetwork * utils = [[RNFetchBlobNetwork alloc] init];
180181
[utils sendRequest:options bridge:self.bridge taskId:taskId withRequest:request callback:callback];
182+
utils = nil;
181183
});
182184
}
183185

src/ios/RNFetchBlobFS.m

+15-11
Original file line numberDiff line numberDiff line change
@@ -258,19 +258,18 @@ - (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode {
258258
// read stream incoming chunk
259259
case NSStreamEventHasBytesAvailable:
260260
{
261-
NSMutableData * chunkData = [[NSMutableData data] init];
261+
NSMutableData * chunkData = [[NSMutableData alloc] init];
262262
NSInteger chunkSize = 4096;
263263
if([[self.encoding lowercaseString] isEqualToString:@"base64"])
264264
chunkSize = 4095;
265265
if(self.bufferSize > 0)
266266
chunkSize = self.bufferSize;
267-
uint8_t buf[chunkSize];
267+
uint8_t * buf = (uint8_t *)malloc(chunkSize);
268268
unsigned int len = 0;
269-
270269
len = [(NSInputStream *)stream read:buf maxLength:chunkSize];
271270
// still have data in stream
272271
if(len) {
273-
[chunkData appendBytes:(const void *)buf length:len];
272+
[chunkData appendBytes:buf length:len];
274273
// dispatch data event
275274
NSString * encodedChunk = [NSString alloc];
276275
if( [[self.encoding lowercaseString] isEqualToString:@"utf8"] ) {
@@ -286,30 +285,32 @@ - (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode {
286285
NSInteger byteLen = chunkData.length/sizeof(uint8_t);
287286
for (int i = 0; i < byteLen; i++)
288287
{
289-
uint8_t * byteFromArray = chunkData.bytes;
290288
NSInteger val = bytePtr[i];
291289
if(i+1 < byteLen)
292290
asciiStr = [asciiStr stringByAppendingFormat:@"%d,", val];
293291
else
294292
asciiStr = [asciiStr stringByAppendingFormat:@"%d", val];
295293
}
296-
free(bytePtr);
297294
}
298295
asciiStr = [asciiStr stringByAppendingString:@"]"];
299296
[self.bridge.eventDispatcher
300297
sendDeviceEventWithName:streamEventCode
301-
body:@{
302-
@"event": FS_EVENT_DATA,
303-
@"detail": asciiStr
298+
body: @{
299+
@"event": FS_EVENT_DATA,
300+
@"detail": asciiStr
304301
}
305302
];
303+
free(buf);
304+
asciiStr = nil;
305+
buf = nil;
306+
chunkData = nil;
306307
return;
307308
}
308309
// convert byte array to base64 data chunks
309310
else if ( [[self.encoding lowercaseString] isEqualToString:@"base64"] ) {
310311
encodedChunk = [chunkData base64EncodedStringWithOptions:0];
311312
}
312-
// unknown encoding, send erro event
313+
// unknown encoding, send error event
313314
else {
314315
[self.bridge.eventDispatcher
315316
sendDeviceEventWithName:streamEventCode
@@ -328,7 +329,8 @@ - (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode {
328329
@"detail": encodedChunk
329330
}
330331
];
331-
332+
chunkData = nil;
333+
free(buf);
332334
}
333335
// end of stream
334336
else {
@@ -339,6 +341,8 @@ - (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode {
339341
@"detail": @""
340342
}
341343
];
344+
chunkData = nil;
345+
free(buf);
342346
}
343347
break;
344348
}

src/ios/RNFetchBlobNetwork.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ typedef void(^DataTaskCompletionHander) (NSData * _Nullable resp, NSURLResponse
2525
@property (nullable, nonatomic) RCTBridge * bridge;
2626
@property (nullable, nonatomic) NSDictionary * options;
2727
@property (nullable, nonatomic) RNFetchBlobFS * fileStream;
28-
@property (strong, nonatomic) CompletionHander fileTaskCompletionHandler;
29-
@property (strong, nonatomic) DataTaskCompletionHander dataTaskCompletionHandler;
28+
//@property (strong, nonatomic) CompletionHander fileTaskCompletionHandler;
29+
//@property (strong, nonatomic) DataTaskCompletionHander dataTaskCompletionHandler;
3030
@property (nullable, nonatomic) NSError * error;
3131

3232

src/ios/RNFetchBlobNetwork.m

+26-22
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ @implementation RNFetchBlobNetwork
3232
@synthesize callback;
3333
@synthesize bridge;
3434
@synthesize options;
35-
@synthesize fileTaskCompletionHandler;
36-
@synthesize dataTaskCompletionHandler;
35+
//@synthesize fileTaskCompletionHandler;
36+
//@synthesize dataTaskCompletionHandler;
3737
@synthesize error;
3838

3939

@@ -88,7 +88,8 @@ - (void) sendRequest:(NSDictionary * _Nullable )options bridge:(RCTBridge * _Nu
8888
// file will be stored at a specific path
8989
if( path != nil) {
9090

91-
self.fileTaskCompletionHandler = ^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
91+
// self.fileTaskCompletionHandler = ;
92+
NSURLSessionDownloadTask * task = [session downloadTaskWithRequest:req completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
9293
if(error != nil) {
9394
callback(@[[error localizedDescription]]);
9495
return;
@@ -102,14 +103,16 @@ - (void) sendRequest:(NSDictionary * _Nullable )options bridge:(RCTBridge * _Nu
102103
return;
103104
}
104105
callback(@[[NSNull null], path]);
105-
};
106-
NSURLSessionDownloadTask * task = [session downloadTaskWithRequest:req completionHandler:fileTaskCompletionHandler];
106+
// prevent memory leaks
107+
self.respData = nil;
108+
}];
107109
[task resume];
108110
}
109111
// file will be stored at tmp path
110112
else if ( [self.options valueForKey:CONFIG_USE_TEMP]!= nil ) {
111113

112-
self.fileTaskCompletionHandler = ^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
114+
// self.fileTaskCompletionHandler;
115+
NSURLSessionDownloadTask * task = [session downloadTaskWithRequest:req completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
113116
if(error != nil) {
114117
callback(@[[error localizedDescription]]);
115118
return;
@@ -124,22 +127,23 @@ - (void) sendRequest:(NSDictionary * _Nullable )options bridge:(RCTBridge * _Nu
124127
return;
125128
}
126129
callback(@[[NSNull null], tmpPath]);
127-
};
128-
NSURLSessionDownloadTask * task = [session downloadTaskWithRequest:req completionHandler:fileTaskCompletionHandler];
130+
// prevent memory leaks
131+
self.respData = nil;
132+
}];
129133
[task resume];
130134
}
131135
// base64 response
132136
else {
133-
self.dataTaskCompletionHandler = ^(NSData * _Nullable resp, NSURLResponse * _Nullable response, NSError * _Nullable error) {
137+
// self.dataTaskCompletionHandler = ;
138+
NSURLSessionDataTask * task = [session dataTaskWithRequest:req completionHandler:^(NSData * _Nullable resp, NSURLResponse * _Nullable response, NSError * _Nullable error) {
134139
if(error != nil) {
135140
callback(@[[error localizedDescription]]);
136141
return;
137142
}
138143
else {
139144
callback(@[[NSNull null], [resp base64EncodedStringWithOptions:0]]);
140145
}
141-
};
142-
NSURLSessionDataTask * task = [session dataTaskWithRequest:req completionHandler:dataTaskCompletionHandler];
146+
}];
143147
[task resume];
144148
}
145149
}
@@ -205,17 +209,17 @@ - (void) application:(UIApplication *)application handleEventsForBackgroundURLSe
205209

206210
}
207211

208-
- (void) URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session
209-
{
210-
if(self.dataTaskCompletionHandler != nil)
211-
{
212-
dataTaskCompletionHandler(self.respData, nil, error);
213-
}
214-
else if(self.fileTaskCompletionHandler != nil)
215-
{
216-
fileTaskCompletionHandler(nil, nil, self.error);
217-
}
218-
}
212+
//- (void) URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session
213+
//{
214+
// if(self.dataTaskCompletionHandler != nil)
215+
// {
216+
// dataTaskCompletionHandler(self.respData, nil, error);
217+
// }
218+
// else if(self.fileTaskCompletionHandler != nil)
219+
// {
220+
// fileTaskCompletionHandler(nil, nil, self.error);
221+
// }
222+
//}
219223

220224
- (void) URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential * _Nullable))completionHandler
221225
{

0 commit comments

Comments
 (0)