Calling FilterSendMessage from a detached thread

I have a minifilter and a simple C++ client that connects to this minifilter over a port. The client receives and sends message to minifilter using FilterGetMessage and FilterSendMessage. The client receives a message from the minifilter, performs tasks foo, updates the minifilter about the status by calling FilterSendMessage and waits for another message. Things were working fine.

Recently, I moved the function (foo) that calls FilterSendMessage to a detached thread e.g. std::thread(foo, ...).detach(). Now when foo is called by the client, FilterSendMessage blocks indefinitely. I also don’t see the log message from MessageNotifyCallback. I am assuming that calling foo from a detached thread has caused this but I can’t be sure.

foo communicates over the network and can have quite large latency. I don’t want to wait for it to finish before calling the FilterGetMessage again. Hence, it was called from a detached thread.

So the question is, is it possible to call FilterSendMessage from a detached thread? If not, I’d like to know the details. Docs don’t mention much. If yes, then I need to debug more.

PS: I am very new to the Win32 platform. Mostly a Linux developer.

There should be no problem calling FilterSendMessage from a thread… either attached or detached.

I’d look elsewhere for the underlying probem.

Peter

Thank you Peter for your reply.

If FilterSendMessage and FilterGetMessage are called from the same thread, (detached or attached), everything works fine. When each of them has their separate threads, then one one blocks indefinitely.

Found the issue.

When I changed

 auto t = std::thread([&] { foo(); }).detach();

to

 auto t = std::thread([=] { foo(); }).detach();

It worked fine! I think I vaguely understand what could be the issue: Capturing by value worked but capturing by reference didn’t.