Commit db11c7db authored by jan.koester's avatar jan.koester
Browse files

fixes fixes

parent cd7c06e3
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -58,8 +58,8 @@ namespace netplus {
            virtual void DisconnectEvent(con *curcon)=0;

            /*locking for competing threads*/
            virtual void unlockCon(int pos)=0;
            virtual bool trylockCon(int pos)=0;
            virtual void unlockCon(con *ucon)=0;
            virtual bool trylockCon(con *tcon)=0;

            /*Connection Ready to send Data
             * DANGEROUS to burnout your cpu
@@ -80,8 +80,8 @@ namespace netplus {
            void WriteEventHandler(con *wcon);
            void CloseEventHandler(con *delcon);
            void sendReady(con *curcon,bool ready);
            void unlockCon(int pos);
            bool trylockCon(int pos);
            void unlockCon(con *ucon);
            bool trylockCon(con *tcon);
        private:

            void                 _setpollEvents(con *curcon,int events);
+9 −14
Original line number Diff line number Diff line
@@ -212,13 +212,10 @@ namespace netplus {
                except[NetException::Error] << "CloseEvent can't delete Connection from epoll";
                throw except;
            }
            delete delcon->csock;
        }

        DisconnectEvent(delcon);

        delcon->conlock.unlock();

        delete delcon->csock;
        delete delcon;
    };

@@ -245,17 +242,15 @@ namespace netplus {
        }
    };

    void poll::unlockCon(int pos){
        con *curcon=(con*)_Events[pos].data.ptr;
        if(curcon)
            curcon->conlock.unlock();
    void poll::unlockCon(con  *ucon){
        if(ucon)
            ucon->conlock.unlock();
    }

    bool poll::trylockCon(int pos){
    bool poll::trylockCon(con *tcon){
        const std::lock_guard<std::mutex> lock(_StateLock);
        con *curcon=(con*)_Events[pos].data.ptr;
        if(curcon)
            return curcon->conlock.try_lock();
        if(tcon)
            return tcon->conlock.try_lock();
        return false;
    }

@@ -273,7 +268,7 @@ namespace netplus {
                    for (int i = 0; i < wfd; ++i) {
                        try {
                            con *pcon=eventptr->ConnectEventHandler(i);
                            if(eventptr->trylockCon(i)){
                            if(eventptr->trylockCon(pcon)){
                                try{
                                    switch (eventptr->pollState(pcon)) {
                                        case poll::EVIN:
@@ -287,7 +282,7 @@ namespace netplus {
                                            excep[NetException::Note] << "Eventworker: nothing todo close connection";
                                            throw excep;
                                    }
                                    eventptr->unlockCon(i);
                                    eventptr->unlockCon(pcon);
                                }catch(NetException& e){
                                    eventptr->CloseEventHandler(pcon);
                                    throw e;