More valgrinding and fixing a serious mem leak - Alex
authorterminatorX <>
Sat, 12 Apr 2003 16:17:23 +0000 (16:17 +0000)
committerterminatorX <>
Sat, 12 Apr 2003 16:17:23 +0000 (16:17 +0000)
src/tX_audiofile.cc
src/tX_engine.cc
src/tX_mastergui.cc
src/tX_prelis.cc
src/tX_vtt.cc
src/tX_vtt.h
src/tX_vttgui.cc
src/tX_widget.c
src/tX_widget.h

index 8372aa713eea257a436b89a63211a7097279ac65..cbd6172c3a78434fd482167c48c1227a7ccc8198 100644 (file)
@@ -162,19 +162,8 @@ tX_audio_error tx_audiofile :: load(char *p_file_name)
 }
 
 tx_audiofile :: ~tx_audiofile() {
-       switch (mem_type) {
-               case TX_AUDIO_MMAP: break;
-               case TX_AUDIO_LOAD: {
-                       free(mem);
-                       break;
-               }
-               case TX_AUDIO_UNDEFINED: break;
-       }       
-
-       if (file) {
-               if (mem_type==TX_AUDIO_MMAP) {
-                       // free mmap
-               }
+       if (mem) {
+               free(mem);
        }
  }
  
index 5aa10a67d0c75c21f5705231a69e57f22cd98833..23baf2b5bfa5ba24b10881f57a13dcecfbf8eb94 100644 (file)
@@ -317,10 +317,14 @@ void tX_engine :: stop() {
 
 tX_engine :: ~tX_engine() {
        void *dummy;
-       
+               
        thread_terminate=true;
        stop_flag=true;
        pthread_mutex_unlock(&start);
        tX_debug("~tX_engine() - Waiting for engine thread to terminate.");
        pthread_join(thread, &dummy);   
+       
+       delete mouse;
+       delete midi;
+       delete tape;    
 }
index 141c7ba6eae8d319e9d8006f96cac22ecc234212..e09e26e4ea66a2d671f82a54a4f7cbe7f1ae374b 100644 (file)
@@ -747,6 +747,8 @@ gboolean quit()
        }
 
        turn_audio_off();
+       vtt_class::delete_all();
+       
        if (update_tag)
        gtk_timeout_remove(update_tag);
        globals.width=main_window->allocation.width;
index 1f68396314d30d601dd052cacbc53623cb32ad81..3927d1d2a7511eb052b93ee337df6734c08f2ded 100644 (file)
@@ -62,7 +62,7 @@ void prelis_start(char *name) {
        int useogg123=0;
        int res;
        char dev[PATH_MAX];
-       char ogg123_dev[PATH_MAX];
+       char ogg123_dev[PATH_MAX]="dev:";
        char nm[PATH_MAX];
        
        if (!globals.prelis) return;
@@ -76,7 +76,6 @@ void prelis_start(char *name) {
                {
                        ext++;
 #ifdef USE_OGG123_INPUT
-                       strcpy(ogg123_dev, "dev:");
                        if (!strncasecmp("ogg", ext, 2))
                        useogg123=1;
                        else
index 4aa6de6aac15a5cce155142e5fdc590da7f90c0d..f4e0dbf7a0c6df3f98e8788a6c77b0d0a85cbe9b 100644 (file)
@@ -103,6 +103,7 @@ vtt_class :: vtt_class (int do_create_gui)
        strcpy(filename, "NONE");
        buffer=NULL;
        samples_in_buffer=0;
+       pos_i_max=0;
 
        pan=0;
        rel_pitch=1; 
@@ -246,6 +247,7 @@ tX_audio_error vtt_class :: load_file(char *fname)
        buffer=NULL;
        samples_in_buffer=0;
        maxpos=0;
+       pos_i_max=0;
        strcpy(filename,"");
 
        audiofile=new tx_audiofile();
@@ -257,6 +259,7 @@ tX_audio_error vtt_class :: load_file(char *fname)
                audiofile_pitch_correction=file_rate/((double) last_sample_rate);
                recalc_pitch();
                samples_in_buffer=audiofile->get_no_samples();
+               pos_i_max=samples_in_buffer-1;
                maxpos=audiofile->get_no_samples();
                strcpy(filename, fname);
                if (was_playing) trigger();
@@ -697,7 +700,7 @@ void vtt_class :: render_scratch()
                                ptr=&buffer[pos_i];
                                sample_a=(f_prec) *ptr;
                        
-                               if (pos_i == samples_in_buffer
+                               if (pos_i == pos_i_max
                                {
                                        sample_b=*buffer;
                                }
index 42683ce6fdac6807e1b67598127e1442a4603339..a8d87e2ef41d18acd913db1230d94145e4b3d154 100644 (file)
@@ -141,6 +141,7 @@ class vtt_class
                
        d_prec pos_f;
        unsigned int pos_i;
+       unsigned int pos_i_max;
        d_prec maxpos;
        
        bool mute;
index c6c036a33ccc1363bad8f05d10ddab9599a9e3c2..1433ab1b1e1352d91f480158d3b26cdb811552bb 100644 (file)
@@ -302,8 +302,9 @@ GtkSignalFunc load_file(GtkWidget *wid, vtt_class *vtt)
 void delete_vtt(GtkWidget *wid, vtt_class *vtt)
 {
        if (audioon) tx_note("Sorry, you'll have to stop playback first.");
-       else
-       delete(vtt);
+       else delete(vtt);
+               
+       mg_update_status();
 }
 
 void edit_vtt_buffer(GtkWidget *wid, vtt_class *vtt)
index 0384b09f22370db1c27e079296f94fca0c736f53..3355295084fab4b6265a375c24be453da23a8bdf 100644 (file)
@@ -132,6 +132,12 @@ static void gtk_tx_init(GtkTx * tx) {
        
        tx->current_fg=&tx->fg;
        tx->current_bg=&tx->bg;
+       
+       tx->spp=1;
+       tx->lastmute=-1;
+       tx->zoom=0;
+       tx->cursor_pos=0;
+       tx->cursor_x_pos=0;
 }
 
 GtkWidget *gtk_tx_new(int16_t * wavdata, int wavsamples) {
@@ -151,9 +157,13 @@ static void gtk_tx_destroy(GtkObject * object) {
        g_return_if_fail(object != NULL);
        g_return_if_fail(GTK_IS_TX(object));
 
+       GtkTx *tx=GTK_TX(object);
+       
+       if (tx->disp_data) { free(tx->disp_data); tx->disp_data=NULL; }
+       
        if (GTK_OBJECT_CLASS(parent_class)->destroy) {
                (*GTK_OBJECT_CLASS(parent_class)->destroy) (object);
-       }
+       }       
 }
 
 #define MAX_ZOOM_WIDTH 500000.0
@@ -221,7 +231,7 @@ static void gtk_tx_prepare(GtkWidget * widget) {
        
        tx->yc = widget->allocation.height / 2;
 
-       if (tx->disp_data) free(tx->disp_data);
+       if (tx->disp_data) { free(tx->disp_data); tx->disp_data=NULL; }
 
        if (tx->data) {
                int max_spp=tx->samples/widget->allocation.width;
@@ -283,6 +293,10 @@ static void gtk_tx_prepare(GtkWidget * widget) {
        } else {
            tx->disp_data = NULL;
        }
+       
+       tx->cursor_pos=-1;
+       tx->lastmute=-1;
+       
        //tX_warning("spp: %i samples: %i width %i x %i", tx->spp, tx->samples, tx->display_width, x);
 }
 
@@ -368,11 +382,6 @@ static void gtk_tx_update(GtkTx * tx) {
        gtk_widget_draw(GTK_WIDGET(tx), NULL);
 }
 
-void gtk_tx_prepare_pos_display(GtkTx * tx) {
-       tx->cursor_pos=-1;
-       tx->lastmute=-1;
-}
-
 void gtk_tx_update_pos_display(GtkTx * tx, int sample, int mute) {
        GtkWidget *widget;
        GdkWindow *window;
@@ -387,7 +396,8 @@ void gtk_tx_update_pos_display(GtkTx * tx, int sample, int mute) {
        //current_x = sample / tx->spp + FR_SIZE;
        current_pos = sample / tx->spp;
        
-       if ((current_pos == tx->cursor_pos) && (tx->lastmute == mute)) return;
+       if ((current_pos == tx->cursor_pos) && 
+               (tx->lastmute == mute)) return;
        tx->lastmute = mute;
 
        /* speedup + easyness */
@@ -400,7 +410,7 @@ void gtk_tx_update_pos_display(GtkTx * tx, int sample, int mute) {
        ymax = widget->allocation.height-1;
 
        /* clean up last pos */
-
+       
        x = tx->cursor_x_pos;
        
        if (x >= 0) {
index 19e0f747247700dd1b42181b1cb44d95e868fa65..250049eafcb8b36a2ab238c45b9db6ace6860fcc 100644 (file)
@@ -93,7 +93,6 @@ struct _GtkTxClass {
 GtkWidget* gtk_tx_new  (int16_t *wavdata, int wavsamples);
 guint gtk_tx_get_type  (void);
 void gtk_tx_set_data  (GtkTx *tx, int16_t *wavdata, int wavsamples);
-void gtk_tx_prepare_pos_display (GtkTx *tx);
 void gtk_tx_cleanup_pos_display (GtkTx *tx);
 void   gtk_tx_update_pos_display  (GtkTx *tx, int sample, int mute);
 void gtk_tx_show_frame(GtkTx *tx, int show);