hello, everbody, maybe there a little bug?
   1. funciton _pg_getresponse() in netcore.c at cli_c directory may cause dead loop, when the server send RESPONSE DATA len is 0(in act server never send any data, but client are waiting for 0 len data). like the Filed widget, when it's no string in it, the pgGetSting will never return.
In apps/dialogdemo, when save dialog demo, and not select nor input any filename , push "save" button. will dead loop.
 
   the funciton
   void _pg_getresponse(int eventwait) {
    ...
   case PG_RESPONSE_DATA:
    {
      ...
      _pg_return.e.data.size = ntohl(pg_data.size);
     
      if (!(_pg_return.e.data.data ="">        return;
      if (_pg_recv(_pg_return.e.data.data,_pg_return.e.data.size))
        return;
     ...
 
   }
  I modify to:
   void _pg_getresponse(int eventwait) {
    ...
   case PG_RESPONSE_DATA:
    {
      ...
      _pg_return.e.data.size = ntohl(pg_data.size);
     
      if (!(_pg_return.e.data.data ="">        return;
      if (!(_pg_return.e.data.size)
      {
          if (_pg_recv(_pg_return.e.data.data,_pg_return.e.data.size))
            return;
      }
     ...
 
   }
   2. a memory leak in dialogbox
   when i open MEMORY_DEBUG, dialogbox will cause memory leak?? (I run in Red Hat7.2, use gcc or kgcc)
   dialogbox.c, it seem the dialog's title widget not correctly release??
 
   if I remment the codes for title like this, there will never memory leak, but title won't dispear too.
 g_error dialogbox_install(struct widget *self) {
  g_error e;
  struct divnode *interior;
 
  ...
  /* Make a divnode after the title to act as an insertion point for child widgets */
#if 0
  e = newdiv(self->sub, self);
  errorcheck;
  interior = *self->sub;
  interior->flags |= PG_S_ALL;
  self->sub = &interior->div;
#endif
  ...
  return success;
}
    if I release it in dialogbox_remove() like fllowing will cause segment fault, what is right way to release this divnod??
 
void dialogbox_remove(struct widget *self) {
  r_divnode_free(self->sub); 
  if (DATA->title)
    handle_free(self->owner, DATA->htitle);
  g_free(DATA);
  WIDGET_REMOVE_PARENT;
}
                                                                   thanks
                                                                     sanit

Reply via email to