Upstream fix for segfault when built with lash support. https://bugs.launchpad.net/seq24/+bug/696371 === modified file 'src/lash.cpp' --- old/src/lash.cpp +++ new/src/lash.cpp @@ -29,17 +29,9 @@ lash::lash(int *argc, char ***argv) { #ifdef LASH_SUPPORT - m_lash_args = lash_extract_args(argc, argv); -#endif // LASH_SUPPORT -} - - -void lash::init(perform* perform) -{ -#ifdef LASH_SUPPORT - m_perform = perform; - - m_client = lash_init(m_lash_args, PACKAGE_NAME, + m_perform = NULL; + + m_client = lash_init(lash_extract_args(argc, argv), PACKAGE_NAME, LASH_Config_File, LASH_PROTOCOL(2, 0)); if (m_client == NULL) { @@ -65,9 +57,10 @@ void -lash::start() +lash::start(perform* perform) { #ifdef LASH_SUPPORT + m_perform = perform; /* Process any LASH events every 250 msec (arbitrarily chosen interval) */ Glib::signal_timeout().connect(sigc::mem_fun(*this, &lash::process_events), 250); #endif // LASH_SUPPORT === modified file 'src/lash.h' --- old/src/lash.h +++ new/src/lash.h @@ -43,7 +43,6 @@ #ifdef LASH_SUPPORT perform *m_perform; lash_client_t *m_client; - lash_args_t *m_lash_args; bool process_events(); void handle_event(lash_event_t* conf); @@ -54,13 +53,12 @@ public: lash(int *argc, char ***argv); - void init(perform* perform); void set_alsa_client_id(int id); - void start(); + void start(perform* perform); }; -/* global lash driver, defined in seq24.cpp */ +/* global lash driver, defined in seq24.cpp and used in midibus.cpp*/ extern lash *lash_driver; === modified file 'src/midibus.cpp' --- old/src/midibus.cpp +++ new/src/midibus.cpp @@ -877,11 +877,11 @@ /* set up our clients queue */ m_queue = snd_seq_alloc_queue( m_alsa_seq ); -#endif #ifdef LASH_SUPPORT /* notify lash of our client ID so it can restore connections */ lash_driver->set_alsa_client_id(snd_seq_client_id(m_alsa_seq)); #endif +#endif } === modified file 'src/perform.cpp' --- old/src/perform.cpp +++ new/src/perform.cpp @@ -1342,6 +1342,7 @@ stats_last_clock_us= (last.tv_sec * 1000000) + (last.tv_nsec / 1000); #else /* get start time position */ + /* timeGetTime() returns a "DWORD" type (= unsigned long)*/ last = timeGetTime(); if ( global_stats ) === modified file 'src/seq24.cpp' --- old/src/seq24.cpp +++ new/src/seq24.cpp @@ -108,12 +108,66 @@ * GTK+. */ Gtk::Main kit(argc, argv); - /* Init the lash driver (strips lash specific command line - * arguments, but does not connect to daemon) */ + /*prepare global MIDI definitions*/ + for ( int i=0; iinit(&p); - lash_driver->start(); + lash_driver->start(&p); #endif kit.run(seq24_window);