@@ -40,7 +40,7 @@ class EventLoop : public brynet::base::NonCopyable
4040 mWakeupChannel(std::make_unique<detail::WakeupChannel>(mIOCP ))
4141#elif defined BRYNET_PLATFORM_LINUX
4242 mEpollFd (epoll_create(1 ))
43- #elif defined BRYNET_PLATFORM_DARWIN
43+ #elif defined BRYNET_PLATFORM_DARWIN || defined BRYNET_PLATFORM_FREEBSD
4444 mKqueueFd (kqueue())
4545#endif
4646 {
@@ -58,7 +58,7 @@ class EventLoop : public brynet::base::NonCopyable
5858 auto eventfd = ::eventfd (0 , EFD_NONBLOCK | EFD_CLOEXEC);
5959 mWakeupChannel .reset (new detail::WakeupChannel (eventfd));
6060 linkChannel (eventfd, mWakeupChannel .get ());
61- #elif defined BRYNET_PLATFORM_DARWIN
61+ #elif defined BRYNET_PLATFORM_DARWIN || defined BRYNET_PLATFORM_FREEBSD
6262 const int NOTIFY_IDENT = 42 ;// Magic number we use for our filter ID.
6363 mWakeupChannel .reset (new detail::WakeupChannel (mKqueueFd , NOTIFY_IDENT));
6464 // Add user event
@@ -73,7 +73,11 @@ class EventLoop : public brynet::base::NonCopyable
7373 mIsInBlock = true ;
7474
7575 reAllocEventSize (1024 );
76+ #if defined BRYNET_PLATFORM_FREEBSD
77+ mSelfThreadID = nullptr ;
78+ #else
7679 mSelfThreadID = -1 ;
80+ #endif
7781 mTimer = std::make_shared<brynet::base::TimerMgr>();
7882 mSelfThreadIDIsInitialized .store (false );
7983 }
@@ -86,7 +90,7 @@ class EventLoop : public brynet::base::NonCopyable
8690#elif defined BRYNET_PLATFORM_LINUX
8791 close (mEpollFd );
8892 mEpollFd = -1 ;
89- #elif defined BRYNET_PLATFORM_DARWIN
93+ #elif defined BRYNET_PLATFORM_DARWIN || defined BRYNET_PLATFORM_FREEBSD
9094 close (mKqueueFd );
9195 mKqueueFd = -1 ;
9296#endif
@@ -187,7 +191,7 @@ class EventLoop : public brynet::base::NonCopyable
187191 channel->canSend ();
188192 }
189193 }
190- #elif defined BRYNET_PLATFORM_DARWIN
194+ #elif defined BRYNET_PLATFORM_DARWIN || defined BRYNET_PLATFORM_FREEBSD
191195 struct timespec timeout = {milliseconds / 1000 , (milliseconds % 1000 ) * 1000 * 1000 };
192196 int numComplete = kevent (mKqueueFd , NULL , 0 , mEventEntries .data (), mEventEntries .size (), &timeout);
193197
@@ -379,7 +383,7 @@ class EventLoop : public brynet::base::NonCopyable
379383 {
380384 return mEpollFd ;
381385 }
382- #elif defined BRYNET_PLATFORM_DARWIN
386+ #elif defined BRYNET_PLATFORM_DARWIN || defined BRYNET_PLATFORM_FREEBSD
383387 int getKqueueHandle () const
384388 {
385389 return mKqueueFd ;
@@ -397,7 +401,7 @@ class EventLoop : public brynet::base::NonCopyable
397401 ev.events = EPOLLET | EPOLLIN | EPOLLOUT | EPOLLRDHUP;
398402 ev.data .ptr = (void *) ptr;
399403 return epoll_ctl (mEpollFd , EPOLL_CTL_ADD, fd, &ev) == 0 ;
400- #elif defined BRYNET_PLATFORM_DARWIN
404+ #elif defined BRYNET_PLATFORM_DARWIN || defined BRYNET_PLATFORM_FREEBSD
401405 struct kevent ev[2 ];
402406 memset (&ev, 0 , sizeof (ev));
403407 int n = 0 ;
@@ -443,7 +447,7 @@ class EventLoop : public brynet::base::NonCopyable
443447#elif defined BRYNET_PLATFORM_LINUX
444448 std::vector<epoll_event> mEventEntries ;
445449 int mEpollFd ;
446- #elif defined BRYNET_PLATFORM_DARWIN
450+ #elif defined BRYNET_PLATFORM_DARWIN || defined BRYNET_PLATFORM_FREEBSD
447451 std::vector<struct kevent > mEventEntries ;
448452 int mKqueueFd ;
449453#endif
0 commit comments