ObjFW  Diff

Differences From Artifact [57b253b8a0]:

  • File src/OFKernelEventObserver.m — part of check-in [f9ceddcb7d] at 2015-04-26 10:42:58 on branch trunk — OFKernelEventObserver: Keep FD -> object mapping

    Removing the FD from the FD -> object mapping results in
    OF_processReadBuffers passing nil to objectIsReadyForReading: if there's
    still something in the read buffer.

    Additionally, this also broke when observing the same object for reading
    and writing and then removing it for either reading or writing. (user: js, size: 9210) [annotate] [blame] [check-ins using]

To Artifact [566a494d67]:


34
35
36
37
38
39
40



41
42
43
44
45
46
47
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50







+
+
+







# import "OFMutex.h"
#endif
#import "OFDate.h"

#ifdef HAVE_KQUEUE
# import "OFKernelEventObserver_kqueue.h"
#endif
#ifdef HAVE_EPOLL
# import "OFKernelEventObserver_epoll.h"
#endif
#if defined(HAVE_POLL_H) || defined(__wii__)
# import "OFKernelEventObserver_poll.h"
#endif
#if defined(HAVE_SYS_SELECT_H) || defined(_WIN32)
# import "OFKernelEventObserver_select.h"
#endif

72
73
74
75
76
77
78
79
80
81
82

83
84
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
75
76
77
78
79
80
81

82
83
84
85
86


87
88

89



90



91



92
93
94
95
96
97
98

99
100
101
102
103
104
105







-



+

-
-
+
+
-

-
-
-

-
-
-

-
-
-

+
+
+



-







}

+ (instancetype)observer
{
	return [[[self alloc] init] autorelease];
}

#if defined(HAVE_KQUEUE)
+ alloc
{
	if (self == [OFKernelEventObserver class])
#if defined(HAVE_KQUEUE)
		return [OFKernelEventObserver_kqueue alloc];

	return [super alloc];
#elif defined(HAVE_EPOLL)
		return [OFKernelEventObserver_epoll alloc];
}
#elif defined(HAVE_POLL_H) || defined(__wii__)
+ alloc
{
	if (self == [OFKernelEventObserver class])
		return [OFKernelEventObserver_poll alloc];

	return [super alloc];
}
#elif defined(HAVE_SYS_SELECT_H) || defined(_WIN32)
+ alloc
{
	if (self == [OFKernelEventObserver class])
		return [OFKernelEventObserver_select alloc];
#else
# error No kqueue / epoll / poll / select found!
#endif

	return [super alloc];
}
#endif

- init
{
	self = [super init];

	@try {
#if !defined(OF_HAVE_PIPE) && !defined(__wii__)