labath added inline comments.
================ Comment at: source/Host/posix/HostThreadPosix.cpp:44 if (IsJoinable()) { #ifndef __ANDROID__ #ifndef __FreeBSD__ ---------------- xiaobai wrote: > labath wrote: > > xiaobai wrote: > > > labath wrote: > > > > xiaobai wrote: > > > > > aprantl wrote: > > > > > > What about: > > > > > > ``` > > > > > > #ifdef __ANDROID__ > > > > > > error.SetErrorString("HostThreadPosix::Cancel() not supported > > > > > > on Android"); > > > > > > #else > > > > > > #ifdef __FreeBSD__ > > > > > > int err = ::pthread_cancel(m_thread); > > > > > > error.SetError(err, eErrorTypePOSIX); > > > > > > #else > > > > > > llvm_unreachable("someone is calling HostThread::Cancel()"); > > > > > > #endif > > > > > > #endif > > > > > > } > > > > > > return error; > > > > > > } > > > > > > ``` > > > > > I agree with Adrian's suggestion, but I would add that you can remove > > > > > one of the `#endif` if you use `#elif defined(__FreeBSD__)` instead > > > > > of an `#else` + `#ifdef __FreeBSD__`. > > > > I think we can just unify the __ANDROID__ and __FreeBSD__ cases (turn > > > > both into unreachable). We only run lldb-server on android, and there > > > > we're mostly single-threaded, so there shouldn't be any thread > > > > cancelling going on anyway... > > > I don't think we can make the FreeBSD case unreachable (if I understand > > > the code correctly) since that's the one case when `::pthread_cancel` is > > > actually getting called. > > > > > > If we can make the `__ANDROID__` case unreachable, this would very easily > > > turn into > > > ``` > > > #if defined(__FreeBSD__) || defined(__NetBSD__) > > > int err = ::pthread_cancel(m_thread); > > > error.SetError(err, eErrorTypePOSIX); > > > #else > > > llvm_unreachable("Someone is calling HostThreadPosix::Cancel()"); > > > #endif > > > ``` > > > > > > I'm somewhat unfamiliar with how exactly this code is used on android. If > > > I understand correctly, you're saying it's used in lldb-server and you > > > meant that lldb-server is mostly single threaded so this code shouldn't > > > get run there? > > Right, sorry, I misinterpreted the ifdefs. We should then merge the android > > case into the !FreeBsd case like you suggest (although I'm not sure why > > NetBSD has appeared there now). > Ah, I added NetBSD since @krytarowski pointed out NetBSD has `pthread_cancel` > available as well. However that probably prevents this patch from being an > NFC, so that could probably be added separately. I see. Others systems have pthread_cancel as well (android is the main exception here), but that function is very c++-unfriendly, so I think we should stop using it (and that's probably the reason why we have the llvm_unreachable there in the first place). https://reviews.llvm.org/D44056 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits