ObjFW  Diff

Differences From Artifact [d30798d206]:

To Artifact [4c3afea7cc]:


272
273
274
275
276
277
278
279

280
281
282
283
284
285
286

287
288
289
290
291
292
293

294
295

296
297
298
299
300
301
302
272
273
274
275
276
277
278

279
280
281
282
283
284
285

286
287
288
289
290
291
292

293
294

295
296
297
298
299
300
301
302







-
+






-
+






-
+

-
+







	OFList OF_GENERIC(OF_KINDOF(OFRunLoopReadQueueItem *)) *queue =
	    [[_readQueues objectForKey: object] retain];

	assert(queue != nil);

	@try {
		if (![queue.firstObject handleObject: object]) {
			of_list_object_t *listObject = queue.firstListObject;
			OFListItem *listItem = queue.firstListItem;

			/*
			 * The handler might have called -[cancelAsyncRequests]
			 * so that our queue is now empty, in which case we
			 * should do nothing.
			 */
			if (listObject != NULL) {
			if (listItem != NULL) {
				/*
				 * Make sure we keep the target until after we
				 * are done removing the object. The reason for
				 * this is that the target might call
				 * -[cancelAsyncRequests] in its dealloc.
				 */
				[[listObject->object retain] autorelease];
				[[listItem->object retain] autorelease];

				[queue removeListObject: listObject];
				[queue removeListItem: listItem];

				if (queue.count == 0) {
					[_kernelEventObserver
					    removeObjectForReading: object];
					[_readQueues
					    removeObjectForKey: object];
				}
315
316
317
318
319
320
321
322

323
324
325
326
327
328
329

330
331
332
333
334
335
336

337
338

339
340
341
342
343
344
345
315
316
317
318
319
320
321

322
323
324
325
326
327
328

329
330
331
332
333
334
335

336
337

338
339
340
341
342
343
344
345







-
+






-
+






-
+

-
+







	 */
	OFList *queue = [[_writeQueues objectForKey: object] retain];

	assert(queue != nil);

	@try {
		if (![queue.firstObject handleObject: object]) {
			of_list_object_t *listObject = queue.firstListObject;
			OFListItem *listItem = queue.firstListItem;

			/*
			 * The handler might have called -[cancelAsyncRequests]
			 * so that our queue is now empty, in which case we
			 * should do nothing.
			 */
			if (listObject != NULL) {
			if (listItem != NULL) {
				/*
				 * Make sure we keep the target until after we
				 * are done removing the object. The reason for
				 * this is that the target might call
				 * -[cancelAsyncRequests] in its dealloc.
				 */
				[[listObject->object retain] autorelease];
				[[listItem->object retain] autorelease];

				[queue removeListObject: listObject];
				[queue removeListItem: listItem];

				if (queue.count == 0) {
					[_kernelEventObserver
					    removeObjectForWriting: object];
					[_writeQueues
					    removeObjectForKey: object];
				}
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426


1427
1428

1429
1430
1431
1432
1433
1434
1435
1416
1417
1418
1419
1420
1421
1422




1423
1424
1425

1426
1427
1428
1429
1430
1431
1432
1433







-
-
-
-
+
+

-
+







	if (state == nil)
		return;

#ifdef OF_HAVE_THREADS
	[state->_timersQueueMutex lock];
	@try {
#endif
		of_list_object_t *iter;

		for (iter = state->_timersQueue.firstListObject; iter != NULL;
		    iter = iter->next) {
		for (OFListItem *iter = state->_timersQueue.firstListItem;
		    iter != NULL; iter = iter->next) {
			if ([iter->object isEqual: timer]) {
				[state->_timersQueue removeListObject: iter];
				[state->_timersQueue removeListItem: iter];
				break;
			}
		}
#ifdef OF_HAVE_THREADS
	} @finally {
		[state->_timersQueueMutex unlock];
	}
1575
1576
1577
1578
1579
1580
1581
1582
1583


1584
1585

1586
1587

1588
1589
1590
1591

1592
1593
1594
1595
1596
1597
1598
1573
1574
1575
1576
1577
1578
1579


1580
1581
1582

1583
1584

1585
1586
1587
1588

1589
1590
1591
1592
1593
1594
1595
1596







-
-
+
+

-
+

-
+



-
+







		for (;;) {
			OFTimer *timer;

#ifdef OF_HAVE_THREADS
			[state->_timersQueueMutex lock];
			@try {
#endif
				of_list_object_t *listObject =
				    state->_timersQueue.firstListObject;
				OFListItem *listItem =
				    state->_timersQueue.firstListItem;

				if (listObject != NULL && [listObject->object
				if (listItem != NULL && [listItem->object
				    fireDate].timeIntervalSinceNow <= 0) {
					timer = [[listObject->object
					timer = [[listItem->object
					    retain] autorelease];

					[state->_timersQueue
					    removeListObject: listObject];
					    removeListItem: listItem];

					[timer of_setInRunLoop: nil mode: nil];
				} else
					break;
#ifdef OF_HAVE_THREADS
			} @finally {
				[state->_timersQueueMutex unlock];