traverso-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Traverso-commit] traverso/src base.pri core/AudioClip.cpp core/S...


From: Remon Sijrier
Subject: [Traverso-commit] traverso/src base.pri core/AudioClip.cpp core/S...
Date: Mon, 25 Jun 2007 13:32:29 +0000

CVSROOT:        /sources/traverso
Module name:    traverso
Changes by:     Remon Sijrier <r_sijrier>       07/06/25 13:32:29

Modified files:
        src            : base.pri 
        src/core       : AudioClip.cpp Song.cpp Song.h 
        src/engine     : AudioDevice.cpp defines.h JackDriver.cpp 
                         Tsar.cpp Tsar.h 

Log message:
        * added thread check DEFINE
        * fixed threading issue where both gui and rt thread were writing to 
the rt event buffer!

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/base.pri?cvsroot=traverso&r1=1.39&r2=1.40
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/AudioClip.cpp?cvsroot=traverso&r1=1.108&r2=1.109
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Song.cpp?cvsroot=traverso&r1=1.119&r2=1.120
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Song.h?cvsroot=traverso&r1=1.61&r2=1.62
http://cvs.savannah.gnu.org/viewcvs/traverso/src/engine/AudioDevice.cpp?cvsroot=traverso&r1=1.35&r2=1.36
http://cvs.savannah.gnu.org/viewcvs/traverso/src/engine/defines.h?cvsroot=traverso&r1=1.9&r2=1.10
http://cvs.savannah.gnu.org/viewcvs/traverso/src/engine/JackDriver.cpp?cvsroot=traverso&r1=1.17&r2=1.18
http://cvs.savannah.gnu.org/viewcvs/traverso/src/engine/Tsar.cpp?cvsroot=traverso&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/traverso/src/engine/Tsar.h?cvsroot=traverso&r1=1.1&r2=1.2

Patches:
Index: base.pri
===================================================================
RCS file: /sources/traverso/traverso/src/base.pri,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -b -r1.39 -r1.40
--- base.pri    22 Jun 2007 12:29:27 -0000      1.39
+++ base.pri    25 Jun 2007 13:32:28 -0000      1.40
@@ -36,14 +36,17 @@
 # gcc 4.3 has a core2 flag, though it's not released yet.
 #QMAKE_CXXFLAGS_RELEASE += -march=core2
 
-#
-# Use Memory Locking 
-#
 
-DEFINES += USE_MLOCK
+#########################################
+#      END USER CONFIGURATION          #
+#########################################
 
-####### END USER CONFIGURATION ########
-########################################
+
+
+
+#################################################
+#  OPTIONS WHO COULD BE USEFULL FOR PACKAGERS  #
+#################################################
 
 #
 # uncomment if you have a patched Qt 4.3.0 !
@@ -53,11 +56,23 @@
 
 DEFINES += STATIC_BUILD
 
+#
+# Use Memory Locking 
+#
+DEFINES += USE_MLOCK
+
+
+#################################################
+#      NO CHANGES BELOW THIS LINE!!            #
+#################################################
+
+
 !macx{
-       DEFINES += PRECOMPILED_HEADER
+#      DEFINES += PRECOMPILED_HEADER
 }
 
-#QMAKE_CXXFLAGS +=  -fstack-protector-all
+# DEFINES += THREAD_CHECK
+# QMAKE_CXXFLAGS +=  -fstack-protector-all
 
 
 CONFIG += warn_on qt
@@ -69,7 +84,6 @@
 
 
 debug {
-#      DEFINES += RT_THREAD_CHECK
        DEFINES += USE_DEBUGGER
 #      DEFINES += USE_MEM_CHECKER
 }

Index: core/AudioClip.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/AudioClip.cpp,v
retrieving revision 1.108
retrieving revision 1.109
diff -u -b -r1.108 -r1.109
--- core/AudioClip.cpp  18 Jun 2007 10:23:27 -0000      1.108
+++ core/AudioClip.cpp  25 Jun 2007 13:32:28 -0000      1.109
@@ -949,7 +949,7 @@
        fadeIn = new FadeCurve(this, m_song, "FadeIn");
        fadeIn->set_shape("Linear");
        fadeIn->set_history_stack(get_history_stack());
-       THREAD_SAVE_CALL_EMIT_SIGNAL(this, fadeIn, 
private_add_fade(FadeCurve*), fadeAdded(FadeCurve*));
+       THREAD_SAVE_INVOKE_AND_EMIT_SIGNAL(this, fadeIn, 
private_add_fade(FadeCurve*), fadeAdded(FadeCurve*));
 }
 
 void AudioClip::create_fade_out( )
@@ -957,7 +957,7 @@
        fadeOut = new FadeCurve(this, m_song, "FadeOut");
        fadeOut->set_shape("Linear");
        fadeOut->set_history_stack(get_history_stack());
-       THREAD_SAVE_CALL_EMIT_SIGNAL(this, fadeOut, 
private_add_fade(FadeCurve*), fadeAdded(FadeCurve*));
+       THREAD_SAVE_INVOKE_AND_EMIT_SIGNAL(this, fadeOut, 
private_add_fade(FadeCurve*), fadeAdded(FadeCurve*));
 }
 
 QDomNode AudioClip::get_dom_node() const

Index: core/Song.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/Song.cpp,v
retrieving revision 1.119
retrieving revision 1.120
diff -u -b -r1.119 -r1.120
--- core/Song.cpp       21 Jun 2007 14:31:10 -0000      1.119
+++ core/Song.cpp       25 Jun 2007 13:32:28 -0000      1.120
@@ -121,7 +121,9 @@
 void Song::init()
 {
        PENTER2;
-//     threadId = QThread::currentThreadId ();
+#if defined (THREAD_CHECK)
+       threadId = QThread::currentThreadId ();
+#endif
 
        m_diskio = new DiskIO(this);
        
@@ -148,12 +150,12 @@
 
        m_playBackBus = audiodevice().get_playback_bus("Playback 1");
 
-       m_transport = m_stopTransport = resumeTransport = m_readyToRecord = 
false;
+       m_transport = m_stopTransport = m_resumeTransport = m_readyToRecord = 
false;
        snaplist = new SnapList(this);
        workSnap = new Snappable();
        workSnap->set_snap_list(snaplist);
 
-       realtimepath = false;
+       m_realtimepath = false;
        m_scheduledForDeletion = false;
        m_isSnapOn=true;
        changed = m_rendering = m_recording = m_prepareRecording = false;
@@ -332,7 +334,7 @@
        if ( ! (spec->renderpass == ExportSpecification::CREATE_CDRDAO_TOC) ) {
                if (is_transport_rolling()) {
                        spec->resumeTransport = true;
-                       stop_transport_rolling();
+                       stop_transport_rolling(false);
                }
                
                m_rendering = true;
@@ -568,53 +570,6 @@
        emit workingPosChanged();
 }
 
-void Song::set_transport_pos(nframes_t position)
-{
-       audiodevice().transport_seek_to(m_audiodeviceClient, position);
-}
-
-
-//
-//  Function _could_ be called in RealTime AudioThread processing path
-//  Be EXTREMELY carefull to not call functions() that have blocking behavior!!
-//
-void Song::start_seek()
-{
-       PMESG2("Song :: entering start_seek");
-//     PMESG2("Song :: thread id is: %ld", QThread::currentThreadId ());
-       PMESG2("Song::start_seek()");
-       
-       if (is_transport_rolling()) {
-               realtimepath = false;
-               resumeTransport = true;
-       }
-
-       m_transport = false;
-       m_startSeek = 0;
-       
-       // only sets a boolean flag, save to call.
-       m_diskio->prepare_for_seek();
-
-       // 'Tell' the diskio it should start a seek action.
-       RT_THREAD_EMIT(this, (void*)m_newTransportFramePos, seekStart(uint));
-
-       PMESG2("Song :: leaving start_seek");
-}
-
-void Song::seek_finished()
-{
-       PMESG2("Song :: entering seek_finished");
-       m_transportFrame = m_newTransportFramePos;
-       m_seeking = 0;
-
-       if (resumeTransport) {
-               start_transport_rolling();
-               resumeTransport = false;
-       }
-
-       emit transportPosSet();
-       PMESG2("Song :: leaving seek_finished");
-}
 
 Command* Song::toggle_snap()
 {
@@ -769,7 +724,7 @@
        if (m_stopTransport) {
                RT_THREAD_EMIT(this, 0, transferStopped());
                m_transport = false;
-               realtimepath = false;
+               m_realtimepath = false;
                m_stopTransport = false;
 
                return 0;
@@ -1091,7 +1046,11 @@
 // Function is only to be called from GUI thread.
 Command * Song::set_recordable()
 {
-       // Do nothing is transport is rolling!
+#if defined (THREAD_CHECK)
+       Q_ASSERT(QThread::currentThreadId() == threadId);
+#endif
+       
+       // Do nothing if transport is rolling!
        if (is_transport_rolling()) {
                return 0;
        }
@@ -1099,14 +1058,14 @@
        // Transport is not rolling, it's save now to switch 
        // recording state to on /off
        if (is_recording()) {
-               set_recording(false);
+               set_recording(false, false);
        } else {
                if (!any_track_armed()) {
                        info().critical(tr("No Tracks armed to record too!"));
                        return 0;
                }
                
-               set_recording(true);
+               set_recording(true, false);
        }
        
        return 0;
@@ -1127,6 +1086,9 @@
 // Function is only to be called from GUI thread.
 Command* Song::start_transport()
 {
+#if defined (THREAD_CHECK)
+       Q_ASSERT(QThread::currentThreadId() == threadId);
+#endif
        // Delegate the transport start (or if we are rolling stop)
        // request to the audiodevice. Depending on the driver in use
        // this call will return directly to us (by a call to 
transport_control),
@@ -1151,7 +1113,7 @@
        switch(state.tranport) {
        case TransportStopped:
                if (is_transport_rolling()) {
-                       stop_transport_rolling();
+                       stop_transport_rolling(state.realtime);
                }
                return true;
        
@@ -1173,6 +1135,7 @@
                                        // prepare_recording() is only to be 
called from the GUI thread
                                        // so we delegate the 
prepare_recording() function call via a 
                                        // RT thread save signal!
+                                       Q_ASSERT(state.realtime);
                                        RT_THREAD_EMIT(this, 0, 
prepareRecording());
                                        PMESG("transport starting: initiating 
prepare for record");
                                        return false;
@@ -1198,9 +1161,10 @@
                        // thread, and TransportStarting never was called 
before!
                        // So in case we are recording we have to prepare for 
recording now!
                        if ( ! state.isSlave && is_recording() ) {
+                               Q_ASSERT(!state.realtime);
                                prepare_recording();
                        }
-                       start_transport_rolling();
+                       start_transport_rolling(state.realtime);
                }
                return true;
        }
@@ -1209,30 +1173,34 @@
 }
 
 // RT thread save function
-void Song::start_transport_rolling()
+void Song::start_transport_rolling(bool realtime)
 {
-       realtimepath = true;
+       m_realtimepath = true;
        m_transport = 1;
        
+       if (realtime) {
        RT_THREAD_EMIT(this, 0, transferStarted());
+       } else {
+               emit transferStarted();
+       }
        
        PMESG("tranport rolling");
 }
 
 // RT thread save function
-void Song::stop_transport_rolling()
+void Song::stop_transport_rolling(bool realtime)
 {
        m_stopTransport = 1;
        
        if (is_recording()) {
-               set_recording(false);
+               set_recording(false, realtime);
        }
        
        PMESG("tranport stopped");
 }
 
 // RT thread save function
-void Song::set_recording(bool recording)
+void Song::set_recording(bool recording, bool realtime)
 {
        m_recording = recording;
        
@@ -1241,13 +1209,21 @@
                m_prepareRecording = false;
        }
        
+       if (realtime) {
        RT_THREAD_EMIT(this, 0, recordingStateChanged());
+       } else {
+               emit recordingStateChanged();
+       }
 }
 
 
 // NON RT thread save function, should only be called from GUI thread!!
 void Song::prepare_recording()
 {
+#if defined (THREAD_CHECK)
+       Q_ASSERT(QThread::currentThreadId() == threadId);
+#endif
+       
        if (m_recording && any_track_armed()) {
                CommandGroup* group = new CommandGroup(this, "");
                int clipcount = 0;
@@ -1267,5 +1243,57 @@
        m_readyToRecord = true;
 }
 
+void Song::set_transport_pos(nframes_t position)
+{
+#if defined (THREAD_CHECK)
+       Q_ASSERT(QThread::currentThreadId() ==  threadId);
+#endif
+       audiodevice().transport_seek_to(m_audiodeviceClient, position);
+}
+
+
+//
+//  Function is ALWAYS called in RealTime AudioThread processing path
+//  Be EXTREMELY carefull to not call functions() that have blocking behavior!!
+//
+void Song::start_seek()
+{
+#if defined (THREAD_CHECK)
+       Q_ASSERT(threadId != QThread::currentThreadId ());
+#endif
+       
+       if (is_transport_rolling()) {
+               m_realtimepath = false;
+               m_resumeTransport = true;
+       }
+
+       m_transport = false;
+       m_startSeek = 0;
+       
+       // only sets a boolean flag, save to call.
+       m_diskio->prepare_for_seek();
+
+       // 'Tell' the diskio it should start a seek action.
+       RT_THREAD_EMIT(this, (void*)m_newTransportFramePos, seekStart(uint));
+}
+
+void Song::seek_finished()
+{
+#if defined (THREAD_CHECK)
+       Q_ASSERT_X(threadId == QThread::currentThreadId (), 
"Song::seek_finished", "Called from other Thread!");
+#endif
+       PMESG2("Song :: entering seek_finished");
+       m_transportFrame = m_newTransportFramePos;
+       m_seeking = 0;
+
+       if (m_resumeTransport) {
+               start_transport_rolling(false);
+               m_resumeTransport = false;
+       }
+
+       emit transportPosSet();
+       PMESG2("Song :: leaving seek_finished");
+}
+
 // eof
 

Index: core/Song.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/Song.h,v
retrieving revision 1.61
retrieving revision 1.62
diff -u -b -r1.61 -r1.62
--- core/Song.h 22 Jun 2007 12:29:28 -0000      1.61
+++ core/Song.h 25 Jun 2007 13:32:28 -0000      1.62
@@ -113,7 +113,7 @@
        void set_snapping(bool snap);
        void set_scrollbar_xy(int x, int y) {m_sbx = x; m_sby = y;}
        int set_state( const QDomNode & node );
-       void set_recording(bool recording);
+       void set_recording(bool recording, bool realtime);
        
 
        int process(nframes_t nframes);
@@ -130,7 +130,7 @@
        Command* remove_track(Track* track, bool historable=true);
        
        bool any_track_armed();
-       bool realtime_path() const {return realtimepath;}
+       bool realtime_path() const {return m_realtimepath;}
        bool is_changed() const {return changed;}
        bool is_snap_on() const {return m_isSnapOn;}
        bool is_recording() const {return m_recording;}
@@ -144,7 +144,9 @@
        audio_sample_t*         readbuffer;
        audio_sample_t*         gainbuffer;
        
+#if defined (THREAD_CHECK)
        unsigned long   threadId;
+#endif
 
 private:
        QList<Track* >          m_tracks;
@@ -182,9 +184,9 @@
        bool            m_rendering;
        bool            changed;
        bool            m_isSnapOn;
-       bool            resumeTransport;
+       bool            m_resumeTransport;
        bool            m_stopTransport;
-       bool            realtimepath;
+       bool            m_realtimepath;
        bool            m_scheduledForDeletion;
        bool            m_recording;
        bool            m_prepareRecording;
@@ -197,8 +199,8 @@
 
        int finish_audio_export();
        void start_seek();
-       void start_transport_rolling();
-       void stop_transport_rolling();
+       void start_transport_rolling(bool realtime);
+       void stop_transport_rolling(bool realtime);
        
        void resize_buffer(bool updateArmStatus, nframes_t size);
 

Index: engine/AudioDevice.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/engine/AudioDevice.cpp,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -b -r1.35 -r1.36
--- engine/AudioDevice.cpp      22 Jun 2007 12:29:28 -0000      1.35
+++ engine/AudioDevice.cpp      25 Jun 2007 13:32:28 -0000      1.36
@@ -17,7 +17,7 @@
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
 
-$Id: AudioDevice.cpp,v 1.35 2007/06/22 12:29:28 r_sijrier Exp $
+$Id: AudioDevice.cpp,v 1.36 2007/06/25 13:32:28 r_sijrier Exp $
 */
 
 #include "AudioDevice.h"
@@ -692,7 +692,7 @@
  */
 void AudioDevice::add_client( Client * client )
 {
-       THREAD_SAVE_CALL(this, client, private_add_client(Client*));
+       THREAD_SAVE_INVOKE(this, client, private_add_client(Client*));
 }
 
 /**
@@ -703,7 +703,7 @@
  */
 void AudioDevice::remove_client( Client * client )
 {
-       THREAD_SAVE_CALL_EMIT_SIGNAL(this, client, 
private_remove_client(Client*), clientRemoved(Client*));
+       THREAD_SAVE_INVOKE_AND_EMIT_SIGNAL(this, client, 
private_remove_client(Client*), clientRemoved(Client*));
 }
 
 void AudioDevice::mili_sleep(int msec)
@@ -789,6 +789,7 @@
        transport_state_t state;
        state.tranport = TransportRolling;
        state.isSlave = false;
+       state.realtime = false;
        state.frame = 0; // get from client!!
        
        client->transport_control(state);
@@ -808,6 +809,7 @@
        transport_state_t state;
        state.tranport = TransportStopped;
        state.isSlave = false;
+       state.realtime = false;
        state.frame = 0; // get from client!!
        
        client->transport_control(state);
@@ -827,6 +829,7 @@
        transport_state_t state;
        state.tranport = TransportStarting;
        state.isSlave = false;
+       state.realtime = false;
        state.frame = frame;
        
        client->transport_control(state);

Index: engine/defines.h
===================================================================
RCS file: /sources/traverso/traverso/src/engine/defines.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- engine/defines.h    22 Jun 2007 12:29:28 -0000      1.9
+++ engine/defines.h    25 Jun 2007 13:32:28 -0000      1.10
@@ -51,6 +51,7 @@
        int tranport;
        nframes_t frame;
        bool isSlave;
+       bool realtime;
 } transport_state_t;
 
 /**

Index: engine/JackDriver.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/engine/JackDriver.cpp,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -b -r1.17 -r1.18
--- engine/JackDriver.cpp       22 Jun 2007 12:29:28 -0000      1.17
+++ engine/JackDriver.cpp       25 Jun 2007 13:32:28 -0000      1.18
@@ -17,7 +17,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  
-    $Id: JackDriver.cpp,v 1.17 2007/06/22 12:29:28 r_sijrier Exp $
+    $Id: JackDriver.cpp,v 1.18 2007/06/25 13:32:28 r_sijrier Exp $
 */
 
 #include "JackDriver.h"
@@ -243,6 +243,8 @@
        transport_state_t tranportstate;
        tranportstate.tranport = state;
        tranportstate.frame = pos.frame;
+       tranportstate.realtime = true;
+       
        device->transport_control(tranportstate);
        
        device->run_cycle( nframes, 0.0);
@@ -255,6 +257,7 @@
        tranportstate.tranport = state;
        tranportstate.frame = pos->frame;
        tranportstate.isSlave = true;
+       tranportstate.realtime = true;
        
        return device->transport_control(tranportstate);
 }

Index: engine/Tsar.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/engine/Tsar.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- engine/Tsar.cpp     5 Feb 2007 17:10:00 -0000       1.8
+++ engine/Tsar.cpp     25 Jun 2007 13:32:28 -0000      1.9
@@ -17,7 +17,7 @@
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
 
-$Id: Tsar.cpp,v 1.8 2007/02/05 17:10:00 r_sijrier Exp $
+$Id: Tsar.cpp,v 1.9 2007/06/25 13:32:28 r_sijrier Exp $
 */
 
 #include "Tsar.h"
@@ -26,6 +26,7 @@
 #include <QMetaMethod>
 #include <QMessageBox>
 #include <QCoreApplication>
+#include <QThread>
                
 
 // Always put me below _all_ includes, this is needed
@@ -59,6 +60,10 @@
        m_events.append(new RingBufferNPT<TsarEvent>(100));
        oldEvents = new RingBufferNPT<TsarEvent>(1000);
        
+#if defined (THREAD_CHECK)
+       m_threadId = QThread::currentThreadId ();
+#endif
+       
        connect(&finishOldEventsTimer, SIGNAL(timeout()), this, 
SLOT(finish_processed_events()));
        
        finishOldEventsTimer.start( 20 );
@@ -81,6 +86,9 @@
  */
 void Tsar::add_event(TsarEvent& event )
 {
+#if defined (THREAD_CHECK)
+       Q_ASSERT_X(m_threadId == QThread::currentThreadId (), 
"Tsar::add_event", "Adding event from other then GUI thread!!");
+#endif
        m_events.at(0)->write(&event, 1);
        m_eventCounter++;
 }
@@ -96,6 +104,9 @@
  */
 void Tsar::add_rt_event( TsarEvent& event )
 {
+#if defined (THREAD_CHECK)
+       Q_ASSERT_X(m_threadId != QThread::currentThreadId (), 
"Tsar::add_rt_event", "Adding event from NON-RT Thread!!");
+#endif
        m_events.at(1)->write(&event, 1);
 }
 
@@ -104,7 +115,7 @@
 //
 void Tsar::process_events( )
 {
-//#define profile
+// #define profile
 
        for (int i=0; i<m_events.size(); ++i) {
                RingBufferNPT<TsarEvent>* newEvents = m_events.at(i);

Index: engine/Tsar.h
===================================================================
RCS file: /sources/traverso/traverso/src/engine/Tsar.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- engine/Tsar.h       2 Oct 2006 19:11:43 -0000       1.1
+++ engine/Tsar.h       25 Jun 2007 13:32:29 -0000      1.2
@@ -17,7 +17,7 @@
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
 
-$Id: Tsar.h,v 1.1 2006/10/02 19:11:43 r_sijrier Exp $
+$Id: Tsar.h,v 1.2 2007/06/25 13:32:29 r_sijrier Exp $
 */
 
 #ifndef TSAR_H
@@ -28,17 +28,31 @@
 #include <QByteArray>
 #include "RingBufferNPT.h"
 
-#define THREAD_SAVE_CALL(caller, argument, slotSignature)  { \
+#define THREAD_SAVE_INVOKE(caller, argument, slotSignature)  { \
                TsarEvent event = tsar().create_event(caller, argument, 
#slotSignature, ""); \
                tsar().add_event(event);\
        }
 
-#define RT_THREAD_EMIT(caller, argument, signalSignature) {\
-               TsarEvent event = tsar().create_event(caller, argument, "", 
#signalSignature); \
-               tsar().add_rt_event(event);\
+#define RT_THREAD_EMIT(cal, arg, signalSignature) {\
+       TsarEvent event; \
+       event.caller = cal; \
+       event.argument = arg; \
+       event.slotindex = -1; \
+       static int retrievedsignalindex; \
+       \
+       if ( ! retrievedsignalindex ) { \
+               /* the signal index seems to have an offset of 4, so we have to 
substract 4 from */ \
+               /* the value returned by caller->metaObject()->indexOfMethod*/  
\
+               retrievedsignalindex = 
cal->metaObject()->indexOfMethod(#signalSignature) - 4; \
+               Q_ASSERT(retrievedsignalindex >= 0); \
+       } \
+       event.signalindex = retrievedsignalindex; \
+       event.valid = true; \
+       tsar().add_rt_event(event); \
 }\
 
-#define THREAD_SAVE_CALL_EMIT_SIGNAL(caller, argument, slotSignature, 
signalSignature)  { \
+
+#define THREAD_SAVE_INVOKE_AND_EMIT_SIGNAL(caller, argument, slotSignature, 
signalSignature)  { \
        TsarEvent event = tsar().create_event(caller, argument, #slotSignature, 
#signalSignature); \
        tsar().add_event(event);\
        }\
@@ -85,6 +99,9 @@
        RingBufferNPT<TsarEvent>*               oldEvents;
        QTimer                  finishOldEventsTimer;
        int                     m_eventCounter;
+#if defined (THREAD_CHECK)
+       unsigned long   m_threadId;
+#endif
 
        void process_events();
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]