Hello, 
      
    
      
    I have a multithread
        program and I use to log over glib. Using g_warning, g_info, etc
        convenience macros. I investigated and the only difference
        between them is the log level used. Something is what I want. 
      
    
        The problem is that if I use g_warning to highlight connection
        problems in my program it coredumps, but it I use g_info it
        works flawlesly. 
      
    
      
    And a trap message is
        shown when using g_warning. The output is just that:
     G_MESSAGES_DEBUG=all ./testgpsd 
        /Gpsd/Test60Seconds: **
(/home/gaguilar/workspace-c/sg64-thrift-c_glib-server/src/test/.libs/testgpsd:21759):
          DEBUG: We must create a thread to process incomming messages
          on client
        ** INFO: Thread created for the client
        
        **
(/home/gaguilar/workspace-c/sg64-thrift-c_glib-server/src/test/.libs/testgpsd:21759):
          WARNING **: sg64_gpsd_handler: Error while waiting on thread
          for GPSD
        «trap» para punto de parada/seguimiento (`core'
          generado)
    
      
    For the main loop on
        the thread:
      
    
      
    
          while (!self->request_exit) {
              if(!gps_waiting(&self->gpsdata, 50000)){
             g_warning
              ("sg64_gpsd_handler: Error while waiting on thread for
              GPSD");
            
        //      g_info ("sg64_gpsd_handler: Error while waiting
          on thread for GPSD");   <---- If I put this it works!
        //      self->request_exit=TRUE; 
              }else{
              if (gps_read(&self->gpsdata) == -1) {
                  g_warning ("sg64_gpsd_handler: %s",
                     "Error while reading on thread GPSD");
                  g_mutex_lock (&self->mutex_settings);
                  self->request_exit=TRUE;
                  g_mutex_unlock
          (&self->mutex_settings);
        
              }else{
                  // Get the time if possible
                  if (isnan(self->gpsdata.fix.time) == 0) {
                 
          (void)unix_to_iso8601(self->gpsdata.fix.time, scr,
          sizeof(scr));
                  printf("Current time %s\n", scr);
                  }
        
                  /* Fill in the latitude. */
                  if (self->gpsdata.fix.mode >= MODE_2D)
          {
                  if(isnan(self->gpsdata.fix.latitude) ==
          0){
                      (void)snprintf(scr, sizeof(scr), "%s %c",
                             deg_to_str(deg_dd,
          fabs(self->gpsdata.fix.latitude)),
                             (self->gpsdata.fix.latitude
          < 0) ? 'S' : 'N');
                      printf("Current lat %s\n", scr);
                  }
                  /* Fill in the longitude. */
                  if (isnan(self->gpsdata.fix.longitude) ==
          0) {
                      (void)snprintf(scr, sizeof(scr), "%s %c",
                             deg_to_str(deg_dd,
          fabs(self->gpsdata.fix.longitude)),
                             (self->gpsdata.fix.longitude
          < 0) ? 'W' : 'E');
                      printf("Current lon %s\n", scr);
                  }
        
                  /* Fill in the speed. */
                  if (isnan(self->gpsdata.fix.track) == 0){
                      (void)snprintf(scr, sizeof(scr), "%.1f
          %s",
                             self->gpsdata.fix.speed,
          "m/s");
        
                      printf("Current speed %s\n", scr);
                  }
                  /* Fill in the heading. */
                  if (isnan(self->gpsdata.fix.track) == 0) {
                      double magheading =
          true2magnetic(self->gpsdata.fix.latitude,
                                   
          self->gpsdata.fix.longitude,
                                   
          self->gpsdata.fix.track);
                      if (!magnetic_flag || isnan(magheading)
          != 0) {
                      (void)snprintf(scr, sizeof(scr), "%.1f
          deg (true)",
                             self->gpsdata.fix.track);
                      } else {
                      (void)snprintf(scr, sizeof(scr), "%.1f
          deg (mag) ",
                             magheading);
                      }
                      printf("Current heading %s\n", scr);
        
                  }
        
                  }
        
                  /* Fill in the altitude. */
                  if (self->gpsdata.fix.mode >= MODE_3D){
                  if(isnan(self->gpsdata.fix.altitude) ==
          0){
                      (void)snprintf(scr, sizeof(scr), "%.1f
          %s",
                             self->gpsdata.fix.altitude,
          "m");
                  }
                  }
        
        
        
              }
              }
          }
      
    
      
    When working with
        g_info the output is this one:
    
        
    /Gpsd/Test60Seconds: **
(/home/gaguilar/workspace-c/sg64-thrift-c_glib-server/src/test/.libs/testgpsd:22552):
          DEBUG: We must create a thread to process incomming messages
          on client
        ** INFO: Thread created for the client
        ** INFO: sg64_gpsd_handler: Error while waiting on
          thread for GPSD
        ** INFO: sg64_gpsd_handler: Error while waiting on
          thread for GPSD
        ** INFO: sg64_gpsd_handler: Error while waiting on
          thread for GPSD
        ** INFO: sg64_gpsd_handler: Error while waiting on
          thread for GPSD
        ** INFO: sg64_gpsd_handler: Error while waiting on
          thread for GPSD
        ** INFO: sg64_gpsd_handler: Error while waiting on
          thread for GPSD
        ** INFO: sg64_gpsd_handler: Error while waiting on
          thread for GPSD
        ** INFO: sg64_gpsd_handler: Error while waiting on
          thread for GPSD
        ** INFO: sg64_gpsd_handler: Error while waiting on
          thread for GPSD
        ** INFO: sg64_gpsd_handler: Error while waiting on
          thread for GPSD
        ** INFO: sg64_gpsd_handler: Error while waiting on
          thread for GPSD
        ** INFO: sg64_gpsd_handler: Error while waiting on
          thread for GPSD
        ** INFO: sg64_gpsd_handler: Error while waiting on
          thread for GPSD
        ** INFO: sg64_gpsd_handler: Error while waiting on
          thread for GPSD
        ** INFO: sg64_gpsd_handler: Error while waiting on
          thread for GPSD
        ** INFO: sg64_gpsd_handler: Error while waiting on
          thread for GPSD
        ** INFO: sg64_gpsd_handler: Error while waiting on
          thread for GPSD
        ** INFO: sg64_gpsd_handler: Error while waiting on
          thread for GPSD
        ** INFO: sg64_gpsd_handler: Error while waiting on
          thread for GPSD
        ** INFO: Thread finished before the wait
        ** INFO: Stopping thread
        
        ** INFO: sg64_gpsd_handler: Error while waiting on
          thread for GPSD
        ** INFO: sg64_gpsd_worker_thread: Finished
        
        done.
        
        OK
      
    
      
    Just perfect. The
        question is why? Where is the problem?
    
      
    Thank you in advance