memory leaks and tweaks, sams histeq icon
authorGood Guy <good1.2guy@gmail.com>
Sun, 17 Dec 2017 21:38:03 +0000 (14:38 -0700)
committerGood Guy <good1.2guy@gmail.com>
Sun, 17 Dec 2017 21:38:03 +0000 (14:38 -0700)
cinelerra-5.1/cinelerra/assetremove.C
cinelerra-5.1/cinelerra/mainerror.C
cinelerra-5.1/cinelerra/mainindexes.C
cinelerra-5.1/cinelerra/mainindexes.h
cinelerra-5.1/cinelerra/mwindow.C
cinelerra-5.1/cinelerra/packagerenderer.C
cinelerra-5.1/cinelerra/removefile.h
cinelerra-5.1/cinelerra/render.C
cinelerra-5.1/guicast/thread.C
cinelerra-5.1/picon/cinfinity/histeq.png

index ec2c0f8cff42de761a9796b63dfedd6e9e66d9ff..49e82414035c41d252d25b8f81246e27cbbe7c5c 100644 (file)
@@ -46,7 +46,10 @@ AssetRemoveWindow::AssetRemoveWindow(MWindow *mwindow)
 
 AssetRemoveWindow::~AssetRemoveWindow()
 {
-       delete data;
+       if( data ) {
+               data->remove_all_objects();
+               delete data;
+       }
 }
 
 void AssetRemoveWindow::create_objects()
index ceeffc4a5ee38378ff0530fe8006bf6a09d7b0ae..4dc01aece5b42b5bb4ff20df29c910c2f86b7757 100644 (file)
@@ -121,6 +121,7 @@ MainError::MainError(MWindow *mwindow)
 MainError::~MainError()
 {
        close_window();
+       errors.remove_all_objects();
        delete errors_lock;
 }
 
index d871a50b39100ac72ffdcd2a6cefc9e19bc606c1..05812bb7c02b47ca1414e455e071e5c16eabfe5b 100644 (file)
@@ -91,13 +91,6 @@ SET_TRACE
        next_lock->unlock();
 }
 
-void MainIndexes::delete_current_sources()
-{
-       for(int i = 0; i < current_indexables.size(); i++)
-               current_indexables.get(i)->Garbage::remove_user();
-       current_indexables.remove_all();
-}
-
 void MainIndexes::start_loop()
 {
        interrupt_flag = 0;
@@ -140,8 +133,6 @@ void MainIndexes::interrupt_build()
 
 void MainIndexes::load_next_sources()
 {
-       delete_current_sources();
-
 // Transfer from new list
        next_lock->lock("MainIndexes::load_next_sources");
        for(int i = 0; i < next_indexables.size(); i++)
@@ -166,13 +157,14 @@ void MainIndexes::run()
 
 // test index of each indexable
                MainProgressBar *progress = 0;
-               int total_sources = current_indexables.size();
 
-               for( int i = 0; i < total_sources && !interrupt_flag; ++i ) {
+               next_lock->lock("MainIndexes::run");
+               for( int i=0; i<current_indexables.size() && !interrupt_flag; ++i ) {
                        Indexable *indexable = current_indexables[i];
                        IndexState *index_state = indexable->index_state;
 // if status is known, no probe
                        if( index_state->index_status != INDEX_NOTTESTED ) continue;
+                       next_lock->unlock();
 
                        IndexFile indexfile(mwindow, indexable);
                        int ret = indexfile.open_index();
@@ -195,8 +187,14 @@ void MainIndexes::run()
                        indexfile.create_index(progress);
                        if( progress->is_cancelled() )
                                interrupt_flag = 1;
+                       next_lock->lock("MainIndexes::run");
                }
 
+               for( int i=0; i<current_indexables.size(); ++i )
+                       current_indexables[i]->remove_user();
+               current_indexables.remove_all();
+               next_lock->unlock();
+
                if(progress) {  // progress box is only created when an index is built
                        if(mwindow->gui) mwindow->gui->lock_window("MainIndexes::run 3");
                        progress->stop_progress();
index c769d7e0e3e020a96b5fba77625ccdb0641252be..810dcd879b526b694f238695af10c3a03abcc7af 100644 (file)
@@ -47,7 +47,6 @@ public:
        void run();
        void interrupt_build();
        void load_next_sources();
-       void delete_current_sources();
 
        ArrayList<Indexable*> current_indexables;
        ArrayList<Indexable*> next_indexables;
index 317900677c602cc2d6ae5d8cab67de4608ec1f51..9bab2c61df5bee55bcb4c4c58f973d6939bbcb56 100644 (file)
@@ -1695,8 +1695,8 @@ if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
 
 // Define new_edls and new_assets to load
        int result = 0, ftype = -1;
-       for(int i = 0; i < filenames->size(); i++)
-       {
+
+       for( int i=0; i<filenames->size(); ++i ) {
 // Get type of file
                File *new_file = new File;
                Asset *new_asset = new Asset(filenames->get(i));
@@ -1715,234 +1715,210 @@ if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
 if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
 
                result = 1;
-               switch(ftype)
-               {
+               switch( ftype ) {
 // Convert media file to EDL
-                       case FILE_OK:
+               case FILE_OK:
 // Warn about odd image dimensions
-                               if(new_asset->video_data &&
-                                       ((new_asset->width % 2) ||
-                                       (new_asset->height % 2)))
-                               {
-                                       char string[BCTEXTLEN];
-                                       sprintf(string, _("%s's resolution is %dx%d.\nImages with odd dimensions may not decode properly."),
-                                               new_asset->path,
-                                               new_asset->width,
-                                               new_asset->height);
-                                       MainError::show_error(string);
-                               }
-
-                               if(new_asset->program >= 0 &&
-                                       edl->session->program_no != new_asset->program)
-                               {
-                                       char string[BCTEXTLEN];
-                                       sprintf(string, _("%s's index was built for program number %d\n"
-                                               "Playback preference is %d.\n  Using program %d."),
-                                               new_asset->path, new_asset->program,
-                                               edl->session->program_no, new_asset->program);
-                                       MainError::show_error(string);
-                               }
+                       if( new_asset->video_data &&
+                           ((new_asset->width % 2) || (new_asset->height % 2)) ) {
+                               char string[BCTEXTLEN];
+                               sprintf(string, _("%s's resolution is %dx%d.\nImages with odd dimensions may not decode properly."),
+                                       new_asset->path, new_asset->width, new_asset->height);
+                               MainError::show_error(string);
+                       }
 
+                       if( new_asset->program >= 0 &&
+                           edl->session->program_no != new_asset->program ) {
+                               char string[BCTEXTLEN];
+                               sprintf(string, _("%s's index was built for program number %d\n"
+                                       "Playback preference is %d.\n  Using program %d."),
+                                       new_asset->path, new_asset->program,
+                                       edl->session->program_no, new_asset->program);
+                               MainError::show_error(string);
+                       }
 
-                               if(load_mode != LOADMODE_RESOURCESONLY)
-                               {
-                                       RecordLabels *labels = edl->session->label_cells ?
-                                               new RecordLabels(new_file) : 0;
-                                       asset_to_edl(new_edl, new_asset, labels);
-                                       new_edls.append(new_edl);
-                                       new_asset->Garbage::remove_user();
-                                       delete labels;
-                                       new_asset = 0;
-                               }
-                               else
-                               {
-                                       new_assets.append(new_asset);
-                                       new_asset = 0;
-                               }
+                       if( load_mode != LOADMODE_RESOURCESONLY ) {
+                               RecordLabels *labels = edl->session->label_cells ?
+                                       new RecordLabels(new_file) : 0;
+                               asset_to_edl(new_edl, new_asset, labels);
+                               new_edls.append(new_edl);
+                               new_edl->add_user();
+                               delete labels;
+                       }
+                       else {
+                               new_assets.append(new_asset);
+                               new_asset->add_user();
+                       }
 
 // Set filename to nothing for assets since save EDL would overwrite them.
-                               if(load_mode == LOADMODE_REPLACE ||
-                                       load_mode == LOADMODE_REPLACE_CONCATENATE)
-                               {
-                                       set_filename("");
+                       if( load_mode == LOADMODE_REPLACE ||
+                           load_mode == LOADMODE_REPLACE_CONCATENATE ) {
+                               set_filename("");
 // Reset timeline position
-                                       for(int i = 0; i < TOTAL_PANES; i++)
-                                       {
-                                               new_edl->local_session->view_start[i] = 0;
-                                               new_edl->local_session->track_start[i] = 0;
-                                       }
+                               for( int i=0; i<TOTAL_PANES; ++i ) {
+                                       new_edl->local_session->view_start[i] = 0;
+                                       new_edl->local_session->track_start[i] = 0;
                                }
+                       }
 
-                               result = 0;
-                               break;
+                       result = 0;
+                       break;
 
 // File not found
-                       case FILE_NOT_FOUND:
-                               sprintf(string, _("Failed to open %s"), new_asset->path);
-                               gui->show_message(string, theme->message_error);
-                               gui->update_default_message();
-                               break;
+               case FILE_NOT_FOUND:
+                       sprintf(string, _("Failed to open %s"), new_asset->path);
+                       gui->show_message(string, theme->message_error);
+                       gui->update_default_message();
+                       break;
 
 // Unknown format
-                       case FILE_UNRECOGNIZED_CODEC:
-                       {
+               case FILE_UNRECOGNIZED_CODEC: {
 // Test index file
-                               {       IndexFile indexfile(this, new_asset);
-                                       if( !(result = indexfile.open_index()) )
-                                               indexfile.close_index();
-                               }
+                       { IndexFile indexfile(this, new_asset);
+                       if( !(result = indexfile.open_index()) )
+                               indexfile.close_index(); }
 
 // Test existing EDLs
-                               for(int j = 0; result && j <= new_edls.total; j++) {
-                                       Asset *old_asset = j < new_edls.total ?
-                                               new_edls[j]->assets->get_asset(new_asset->path) :
-                                               edl->assets->get_asset(new_asset->path);
-                                       if( old_asset ) {
-                                               new_asset->copy_from(old_asset,1);
-                                               result = 0;
-                                       }
+                       for( int j=0; result && j<new_edls.total; ++j ) {
+                               Asset *old_asset = new_edls[j]->assets->get_asset(new_asset->path);
+                               if( old_asset ) {
+                                       new_asset->copy_from(old_asset,1);
+                                       result = 0;
                                }
+                       }
+                       if( result ) {
+                               Asset *old_asset = edl->assets->get_asset(new_asset->path);
+                               if( old_asset ) {
+                                       new_asset->copy_from(old_asset,1);
+                                       result = 0;
+                               }
+                       }
 
 // Prompt user
-                               if(result)
-                               {
-                                       char string[BCTEXTLEN];
-                                       FileSystem fs;
-                                       fs.extract_name(string, new_asset->path);
-
-                                       strcat(string, _("'s format couldn't be determined."));
-                                       new_asset->audio_data = 1;
-                                       new_asset->format = FILE_PCM;
-                                       new_asset->channels = defaults->get("AUDIO_CHANNELS", 2);
-                                       new_asset->sample_rate = defaults->get("SAMPLE_RATE", 44100);
-                                       new_asset->bits = defaults->get("AUDIO_BITS", 16);
-                                       new_asset->byte_order = defaults->get("BYTE_ORDER", 1);
-                                       new_asset->signed_ = defaults->get("SIGNED_", 1);
-                                       new_asset->header = defaults->get("HEADER", 0);
-
-                                       FileFormat fwindow(this);
-                                       fwindow.create_objects(new_asset, string);
-                                       result = fwindow.run_window();
-
-
-                                       defaults->update("AUDIO_CHANNELS", new_asset->channels);
-                                       defaults->update("SAMPLE_RATE", new_asset->sample_rate);
-                                       defaults->update("AUDIO_BITS", new_asset->bits);
-                                       defaults->update("BYTE_ORDER", new_asset->byte_order);
-                                       defaults->update("SIGNED_", new_asset->signed_);
-                                       defaults->update("HEADER", new_asset->header);
-                                       save_defaults();
-                               }
+                       if( result ) {
+                               char string[BCTEXTLEN];
+                               FileSystem fs;
+                               fs.extract_name(string, new_asset->path);
+
+                               strcat(string, _("'s format couldn't be determined."));
+                               new_asset->audio_data = 1;
+                               new_asset->format = FILE_PCM;
+                               new_asset->channels = defaults->get("AUDIO_CHANNELS", 2);
+                               new_asset->sample_rate = defaults->get("SAMPLE_RATE", 44100);
+                               new_asset->bits = defaults->get("AUDIO_BITS", 16);
+                               new_asset->byte_order = defaults->get("BYTE_ORDER", 1);
+                               new_asset->signed_ = defaults->get("SIGNED_", 1);
+                               new_asset->header = defaults->get("HEADER", 0);
+
+                               FileFormat fwindow(this);
+                               fwindow.create_objects(new_asset, string);
+                               result = fwindow.run_window();
+
+                               defaults->update("AUDIO_CHANNELS", new_asset->channels);
+                               defaults->update("SAMPLE_RATE", new_asset->sample_rate);
+                               defaults->update("AUDIO_BITS", new_asset->bits);
+                               defaults->update("BYTE_ORDER", new_asset->byte_order);
+                               defaults->update("SIGNED_", new_asset->signed_);
+                               defaults->update("HEADER", new_asset->header);
+                               save_defaults();
+                       }
 
 // Append to list
-                               if(!result)
-                               {
+                       if( !result ) {
 // Recalculate length
-                                       delete new_file;
-                                       new_file = new File;
-                                       result = new_file->open_file(preferences, new_asset, 1, 0);
+                               delete new_file;
+                               new_file = new File;
+                               result = new_file->open_file(preferences, new_asset, 1, 0);
 
-                                       if(load_mode != LOADMODE_RESOURCESONLY)
-                                       {
-                                               RecordLabels *labels = edl->session->label_cells ?
-                                                       new RecordLabels(new_file) : 0;
-                                               asset_to_edl(new_edl, new_asset, labels);
-                                               new_edls.append(new_edl);
-                                               new_asset->Garbage::remove_user();
-                                               delete labels;
-                                               new_asset = 0;
-                                       }
-                                       else
-                                       {
-                                               new_assets.append(new_asset);
-                                               new_asset = 0;
-                                       }
+                               if( load_mode != LOADMODE_RESOURCESONLY ) {
+                                       RecordLabels *labels = edl->session->label_cells ?
+                                               new RecordLabels(new_file) : 0;
+                                       asset_to_edl(new_edl, new_asset, labels);
+                                       new_edls.append(new_edl);
+                                       new_edl->add_user();
+                                       delete labels;
                                }
-                               else
-                               {
-                                       result = 1;
+                               else {
+                                       new_assets.append(new_asset);
+                                       new_asset->add_user();
                                }
-                               break;
                        }
+                       else {
+                               result = 1;
+                       }
+                       break; }
 
-                       case FILE_IS_XML:
-                       {
-                               FileXML xml_file;
+               case FILE_IS_XML: {
+                       FileXML xml_file;
 if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
-                               xml_file.read_from_file(filenames->get(i));
+                       xml_file.read_from_file(filenames->get(i));
 if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
-                               const char *cin_version = 0;
-                               while( !xml_file.read_tag() ) {
-                                       if( xml_file.tag.title_is("EDL") ) {
-                                               cin_version = xml_file.tag.get_property("VERSION");
-                                               break;
-                                       }
-                               }
-                               xml_file.rewind();
-                               if( !cin_version ) {
-                                       eprintf(_("XML file %s\n not from cinelerra."),filenames->get(i));
-                                       char string[BCTEXTLEN];
-                                       sprintf(string,_("Unknown %s"), filenames->get(i));
-                                       gui->show_message(string);
-                                       result = 1;
+                       const char *cin_version = 0;
+                       while( !xml_file.read_tag() ) {
+                               if( xml_file.tag.title_is("EDL") ) {
+                                       cin_version = xml_file.tag.get_property("VERSION");
                                        break;
                                }
-                               if( strcmp(cin_version, CINELERRA_VERSION) ) {
-                                       char string[BCTEXTLEN];
-                                       snprintf(string, sizeof(string),
-                                                _("Warning: XML from cinelerra version %s\n"
-                                               "Session data may be incompatible."), cin_version);
-                                       show_warning(&preferences->warn_version, string);
-                               }
-                               if(load_mode == LOADMODE_NESTED)
-                               {
+                       }
+                       xml_file.rewind();
+                       if( !cin_version ) {
+                               eprintf(_("XML file %s\n not from cinelerra."),filenames->get(i));
+                               char string[BCTEXTLEN];
+                               sprintf(string,_("Unknown %s"), filenames->get(i));
+                               gui->show_message(string);
+                               result = 1;
+                               break;
+                       }
+                       if( strcmp(cin_version, CINELERRA_VERSION) ) {
+                               char string[BCTEXTLEN];
+                               snprintf(string, sizeof(string),
+                                        _("Warning: XML from cinelerra version %s\n"
+                                       "Session data may be incompatible."), cin_version);
+                               show_warning(&preferences->warn_version, string);
+                       }
+                       if( load_mode == LOADMODE_NESTED ) {
 // Load temporary EDL for nesting.
-                                       EDL *nested_edl = new EDL;
-                                       nested_edl->create_objects();
-                                       nested_edl->set_path(filenames->get(i));
-                                       nested_edl->load_xml(&xml_file, LOAD_ALL);
+                               EDL *nested_edl = new EDL;
+                               nested_edl->create_objects();
+                               nested_edl->set_path(filenames->get(i));
+                               nested_edl->load_xml(&xml_file, LOAD_ALL);
 //printf("MWindow::load_filenames %p %s\n", nested_edl, nested_edl->project_path);
-                                       edl_to_nested(new_edl, nested_edl);
-                                       nested_edl->Garbage::remove_user();
-                               }
-                               else
-                               {
+                               edl_to_nested(new_edl, nested_edl);
+                               nested_edl->Garbage::remove_user();
+                       }
+                       else {
 // Load EDL for pasting
-                                       new_edl->load_xml(&xml_file, LOAD_ALL);
+                               new_edl->load_xml(&xml_file, LOAD_ALL);
 if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
-                                       test_plugins(new_edl, filenames->get(i));
+                               test_plugins(new_edl, filenames->get(i));
 if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
 
-                                       if(load_mode == LOADMODE_REPLACE ||
-                                               load_mode == LOADMODE_REPLACE_CONCATENATE)
-                                       {
-                                               strcpy(session->filename, filenames->get(i));
-                                               strcpy(new_edl->local_session->clip_title,
-                                                       filenames->get(i));
-                                               if(update_filename)
-                                                       set_filename(new_edl->local_session->clip_title);
-                                       }
-                                       else
-                                       if( load_mode == LOADMODE_RESOURCESONLY ) {
-                                               strcpy(new_edl->local_session->clip_title,
-                                                       filenames->get(i));
-                                               struct stat st;
-                                               time_t t = !stat(filenames->get(i),&st) ?
-                                                       st.st_mtime : time(&t);
-                                               ctime_r(&t, new_edl->local_session->clip_notes);
-                                       }
+                               if( load_mode == LOADMODE_REPLACE ||
+                                   load_mode == LOADMODE_REPLACE_CONCATENATE ) {
+                                       strcpy(session->filename, filenames->get(i));
+                                       strcpy(new_edl->local_session->clip_title,
+                                               filenames->get(i));
+                                       if(update_filename)
+                                               set_filename(new_edl->local_session->clip_title);
+                               }
+                               else if( load_mode == LOADMODE_RESOURCESONLY ) {
+                                       strcpy(new_edl->local_session->clip_title,
+                                               filenames->get(i));
+                                       struct stat st;
+                                       time_t t = !stat(filenames->get(i),&st) ?
+                                               st.st_mtime : time(&t);
+                                       ctime_r(&t, new_edl->local_session->clip_notes);
                                }
-
-                               new_edls.append(new_edl);
-                               result = 0;
-                               break;
                        }
+
+                       new_edls.append(new_edl);
+                       new_edl->add_user();
+                       result = 0;
+                       break; }
                }
 
-// edls are in new_edls
-               if( result && new_edl ) new_edl->Garbage::remove_user();
-// assets are copied
-               if( new_asset ) new_asset->Garbage::remove_user();
+               new_edl->Garbage::remove_user();
+               new_asset->Garbage::remove_user();
 
 // Store for testing index
                new_files.append(new_file);
index e05080999f3f218c0b05a4cb3cccd4a39f8d92ba..4318bec73b9435f79713e3a45623b9901a1cfb55 100644 (file)
@@ -105,6 +105,7 @@ PackageRenderer::~PackageRenderer()
        delete video_cache;
        delete vconfig;
        delete aconfig;
+       delete timer;
 }
 
 // PackageRenderer::initialize happens only once for every node when doing rendering session
index b2f35fa5042d25026b1b31da69f083118fbec468..371c0710b1e6b28b00fb01841908fb07b3dd1031 100644 (file)
@@ -40,12 +40,13 @@ public:
        void wait() { Thread::join(); delete this; }
        static void removeFile(const char *path) {
                RemoveFile *rf = new RemoveFile(path,1);
-               rf->run();
+               rf->start();
        }
        static void removeFileWait(const char *path) {
                if( ::access(path, F_OK) ) return;
                RemoveFile *rf = new RemoveFile(path,0);
-               rf->run();  rf->wait();
+               rf->start();  rf->wait();
+               delete rf;
        }
 };
 
index 5ce0354170f9edfb2ad7fb301a853f4c79efaea4..f50ae8958935d0bc96a5eb172122ba68355e0334 100644 (file)
@@ -255,9 +255,7 @@ Render::~Render()
        delete package_lock;
        delete counter_lock;
        delete completion;
-// May be owned by someone else.  This is owned by mwindow, so we don't care
-// about deletion.
-//     delete preferences;
+       delete preferences;
        delete progress_timer;
        if( asset ) asset->Garbage::remove_user();
        delete thread;
@@ -314,13 +312,11 @@ void Render::start_batches(ArrayList<BatchRenderJob*> *jobs,
        mode = Render::BATCH;
        batch_cancelled = 0;
        this->jobs = jobs;
-       this->preferences = preferences;
+       this->preferences = new Preferences;
+       this->preferences->copy_from(preferences);
 
        completion->reset();
-PRINT_TRACE
        thread->run();
-PRINT_TRACE
-       this->preferences = 0;
 }
 
 
@@ -715,15 +711,12 @@ void RenderThread::render_single(int test_overwrite, Asset *asset, EDL *edl,
        render->progress = 0;
        render->result = 0;
 
-       if(mwindow)
-       {
-               if(!render->preferences)
+       if( mwindow ) {
+               if( !render->preferences )
                        render->preferences = new Preferences;
-
                render->preferences->copy_from(mwindow->preferences);
        }
 
-
 // Create rendering command
        TransportCommand *command = new TransportCommand;
        command->command = NORMAL_FWD;
@@ -1135,6 +1128,9 @@ RenderWindow::RenderWindow(MWindow *mwindow,
        this->mwindow = mwindow;
        this->render = render;
        this->asset = asset;
+       render_format = 0;
+       loadmode = 0;
+       renderprofile = 0;
        rangeproject = 0;
        rangeselection = 0;
        rangeinout = 0;
@@ -1143,15 +1139,11 @@ RenderWindow::RenderWindow(MWindow *mwindow,
 
 RenderWindow::~RenderWindow()
 {
-SET_TRACE
        lock_window("RenderWindow::~RenderWindow");
-SET_TRACE
        delete render_format;
-SET_TRACE
        delete loadmode;
-SET_TRACE
+       delete renderprofile;
        unlock_window();
-SET_TRACE
 }
 
 
index 26ccf9a45918ce78b7147c4dc7bb6829b136da18..b27f43a25856198a5e82909b4d788cb677970dad 100644 (file)
@@ -65,8 +65,8 @@ void* Thread::entrypoint(void *parameters)
        thread->run();
        thread->finished = true;
        if( !thread->synchronous ) {
-               if( !thread->cancelled ) TheList::dbg_del(thread->tid);
                if( thread->autodelete ) delete thread;
+               else if( !thread->cancelled ) TheList::dbg_del(thread->tid);
                else thread->tid = ((pthread_t)-1);
        }
        return NULL;
@@ -106,9 +106,13 @@ void Thread::start()
                        perror("Thread::start pthread_attr_setinheritsched");
        }
 
+// autodelete may delete this immediately after create
+       int autodelete = this->autodelete;
+
        pthread_create(&tid, &attr, Thread::entrypoint, this);
 
-       TheList::dbg_add(tid, owner, typeid(*this).name());
+       if( !autodelete )
+               TheList::dbg_add(tid, owner, typeid(*this).name());
 }
 
 int Thread::cancel()
index 658d2f3820183356b15e156b946c4a6dba104195..a2a4bbee0ba6063935c07b7918f828ffc68e70b8 100644 (file)
Binary files a/cinelerra-5.1/picon/cinfinity/histeq.png and b/cinelerra-5.1/picon/cinfinity/histeq.png differ