|
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
|
