Giter Site home page Giter Site logo

Comments (3)

ddevienne avatar ddevienne commented on July 23, 2024

uWS is single-threaded, and uses thread_local variables. So while it can be used in a multi-threaded environment, you have to be careful when crossing thread boundaries. I don't recall whether defer() can be used safely across-threads. But given you crash, maybe not? FWIW.

from uwebsockets.

damirbarr avatar damirbarr commented on July 23, 2024

I was using the defer() function so far for exactly this reason and it worked. For some reason now it sometimes crashes.
The defer function uses the loop's thread, and this is why I'm using it.
My software is multithreaded and I think there's maybe a bug here.

Reference from this repo:

    /* Defer this callback on Loop's thread of execution */
    void defer(MoveOnlyFunction<void()> &&cb) {
        LoopData *loopData = (LoopData *) us_loop_ext((us_loop_t *) this);

        //if (std::thread::get_id() == ) // todo: add fast path for same thread id
        loopData->deferMutex.lock();
        loopData->deferQueues[loopData->currentDeferQueue].emplace_back(std::move(cb));
        loopData->deferMutex.unlock();

        us_wakeup_loop((us_loop_t *) this);
    }

from uwebsockets.

uNetworkingAB avatar uNetworkingAB commented on July 23, 2024

defer is thread safe. But you need to check your composition with ThreadSanitizer or AddressSanitizer. The stacktrace is very weird and most likely not showing the real problem

from uwebsockets.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.