Skip to content

Commit 2b4b6e0

Browse files
dsward2dsward2
authored andcommitted
In TaskPipelineManager, a new kTaskPipelineStatusTerminating status code was added between the kTaskPipelineStatusRunning and kTaskPipelineStatusTerminated phases.
In TaskPipelineManager terminateTasks, the @synchronized directive was used in a critical section of code, and the result of NSTask isRunning is checked before sending the terminate message. This should avoid some crashes that occurred when terminate was sent to an NSTask that had already terminated. Also, the NSTask terminate section of code is now enclosed in a @try/@catch block to avoid app crashes.
1 parent d704152 commit 2b4b6e0

3 files changed

Lines changed: 23 additions & 15 deletions

File tree

LocalRadio/Info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
<key>CFBundlePackageType</key>
1818
<string>APPL</string>
1919
<key>CFBundleShortVersionString</key>
20-
<string>1.12</string>
20+
<string>1.13</string>
2121
<key>CFBundleVersion</key>
22-
<string>13</string>
22+
<string>14</string>
2323
<key>LSApplicationCategoryType</key>
2424
<string>public.app-category.entertainment</string>
2525
<key>LSMinimumSystemVersion</key>

LocalRadio/TaskPipelineManager.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010

1111
#define kTaskPipelineStatusIdle 0
1212
#define kTaskPipelineStatusRunning 1
13-
#define kTaskPipelineStatusTerminated 2
13+
#define kTaskPipelineStatusTerminating 2
14+
#define kTaskPipelineStatusTerminated 3
1415

1516
@class TaskItem;
1617

LocalRadio/TaskPipelineManager.m

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -118,9 +118,6 @@ - (void) startTasks
118118

119119
[self configureTaskPipes];
120120

121-
//NSArray * reversedTaskItemsArray = [[self.taskItemsArray reverseObjectEnumerator] allObjects];
122-
123-
//for (TaskItem * taskItem in reversedTaskItemsArray)
124121
for (TaskItem * taskItem in self.taskItemsArray)
125122
{
126123
NSError * startTaskError = [taskItem startTask];
@@ -136,19 +133,29 @@ - (void) startTasks
136133

137134
- (void) terminateTasks
138135
{
139-
//NSArray * reversedTaskItemsArray = [[self.taskItemsArray reverseObjectEnumerator] allObjects];
140-
141-
//for (TaskItem * taskItem in reversedTaskItemsArray)
142-
for (TaskItem * taskItem in self.taskItemsArray)
136+
@synchronized (self)
143137
{
144-
NSError * terminateTaskError = [taskItem terminateTask];
145-
}
146-
147-
[self.taskItemsArray removeAllObjects];
138+
self.taskPipelineStatus = kTaskPipelineStatusTerminating;
148139

149-
self.taskPipelineStatus = kTaskPipelineStatusTerminated;
140+
for (TaskItem * taskItem in self.taskItemsArray)
141+
{
142+
if (taskItem.task.isRunning == YES)
143+
{
144+
@try {
145+
NSError * terminateTaskError = [taskItem terminateTask];
146+
}
147+
@catch (NSException *exception) {
148+
149+
}
150+
}
151+
}
152+
153+
[self.taskItemsArray removeAllObjects];
154+
}
150155

151156
[NSThread sleepForTimeInterval:0.1f];
157+
158+
self.taskPipelineStatus = kTaskPipelineStatusTerminated;
152159
}
153160

154161

0 commit comments

Comments
 (0)