ObjFW  Diff

Differences From Artifact [b78dbdb727]:

To Artifact [30c14bee93]:


85
86
87
88
89
90
91
92
93
94


95
96
97
98
99
100
101
102
103
104

105
106
107

108
109
110
111
112
113
114
- (void)run
{
	for (;;) {
		void *pool = objc_autoreleasePoolPush();
		OFDate *now = [OFDate date];

		@synchronized (timersQueue) {
			of_list_object_t *iter, *next;

			for (iter = [timersQueue firstListObject];


			    iter != NULL; iter = next) {
				/*
				 * If a timer is in the future, we can
				 * stop now as it is sorted.
				 */
				if ([[iter->object fireDate] compare: now] ==
				    OF_ORDERED_DESCENDING)
					break;

				[iter->object fire];


				next = iter->next;
				[timersQueue removeListObject: iter];

			}

			/* Sleep until we reach the next timer */
			if (iter != NULL)
				[OFThread sleepUntilDate:
				    [iter->object fireDate]];
			else {







|

|
>
>
|








|
>

|
|
>







85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
- (void)run
{
	for (;;) {
		void *pool = objc_autoreleasePoolPush();
		OFDate *now = [OFDate date];

		@synchronized (timersQueue) {
			of_list_object_t *iter;

			while ((iter = [timersQueue firstListObject]) != NULL) {
				void *pool2 = objc_autoreleasePoolPush();
				OFTimer *timer;

				/*
				 * If a timer is in the future, we can
				 * stop now as it is sorted.
				 */
				if ([[iter->object fireDate] compare: now] ==
				    OF_ORDERED_DESCENDING)
					break;

				timer = [[iter->object retain] autorelease];
				[timersQueue removeListObject: iter];

				[timer fire];

				objc_autoreleasePoolPop(pool2);
			}

			/* Sleep until we reach the next timer */
			if (iter != NULL)
				[OFThread sleepUntilDate:
				    [iter->object fireDate]];
			else {