From: Match Grun Date: Sat, 26 Apr 2003 04:56:44 +0000 (+0000) Subject: Fixed memleaks and segfaults X-Git-Tag: rel_0_9_0~91 X-Git-Url: http://git.claws-mail.org/?p=claws.git;a=commitdiff_plain;h=4338d3367345e7b03d80ce84afd0609e884f0b3f Fixed memleaks and segfaults --- diff --git a/ChangeLog.claws b/ChangeLog.claws index 9dabaa9c3..77a9b29f4 100644 --- a/ChangeLog.claws +++ b/ChangeLog.claws @@ -1,3 +1,14 @@ +2003-04-25 [match] 0.8.11claws113 + + * src/addrindex.c + * src/addrbook.c + * src/ldapquery.[ch] + * src/ldapctrl.[ch] + fix memleak. + * src/ldapserver.[ch] + fix memleak. fix segfault. + plug a Claws memleak + 2003-04-25 [alfons] 0.8.11claws112 * src/folder.c diff --git a/configure.ac b/configure.ac index 5bfda6bb2..7f91cb9e7 100644 --- a/configure.ac +++ b/configure.ac @@ -11,7 +11,7 @@ MINOR_VERSION=8 MICRO_VERSION=11 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=claws112 +EXTRA_VERSION=claws113 VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION$EXTRA_VERSION dnl set $target diff --git a/src/addrbook.c b/src/addrbook.c index e81625c91..909568dc5 100644 --- a/src/addrbook.c +++ b/src/addrbook.c @@ -511,17 +511,22 @@ static void addrbook_parse_member(AddressBookFile *book, XMLFile *file, { GList *attr; gchar *name, *value; - gchar *pid = NULL, *eid = NULL; + gchar *eid = NULL; + /* gchar *pid = NULL; */ ItemEMail *email = NULL; attr = xml_get_current_tag_attr(file); while (attr) { name = ((XMLAttr *)attr->data)->name; value = ((XMLAttr *)attr->data)->value; + /* if (strcmp(name, AB_ATTAG_PID) == 0) pid = g_strdup(value); else if (strcmp(name, AB_ATTAG_EID) == 0) eid = g_strdup(value); + */ + if( strcmp( name, AB_ATTAG_EID ) == 0 ) + eid = g_strdup( value ); attr = g_list_next(attr); } /* email = addrcache_get_email( book->addressCache, pid, eid ); */ diff --git a/src/addrindex.c b/src/addrindex.c index c706968bb..785a44c39 100644 --- a/src/addrindex.c +++ b/src/addrindex.c @@ -1370,7 +1370,7 @@ static AddressDataSource *addrindex_parse_ldap( XMLFile *file ) { attr = g_list_next( attr ); } - server = ldapsvr_create(); + server = ldapsvr_create_noctl(); ldapsvr_set_name( server, serverName ); ldapsvr_set_search_flag( server, bSearch ); g_free( serverName ); @@ -2591,7 +2591,7 @@ static void addrindex_search_ldap( LdapServer *server, const gint queryID ) { gchar *name; if( ! server->searchFlag ) return; - printf( "Searching ::%s::\n", ldapsvr_get_name( server ) ); + /* printf( "Searching ::%s::\n", ldapsvr_get_name( server ) ); */ /* Retire any aged queries */ ldapsvr_retire_query( server ); diff --git a/src/ldapquery.c b/src/ldapquery.c index 53bdb17b6..e157dfc1f 100644 --- a/src/ldapquery.c +++ b/src/ldapquery.c @@ -299,20 +299,6 @@ gboolean ldapqry_get_aged_flag( LdapQuery *qry ) { return qry->agedFlag; } -/** - * Release the thread associated with the query. - * \param qry Query object to process. - */ -void ldapqry_release_thread( LdapQuery *qry ) { - g_return_if_fail( qry != NULL ); - printf( "ldapqry_release_thread...\n" ); - if( qry->thread != NULL ) { - g_free( qry->thread ); - printf( "\t===========>done\n" ); - } - qry->thread = NULL; -} - /** * Release the LDAP control data associated with the query. * \param qry Query object to process. @@ -354,7 +340,8 @@ void ldapqry_clear( LdapQuery *qry ) { } /** - * Free up LDAP query object by releasing internal memory. + * Free up LDAP query object by releasing internal memory. Note that + * the thread object will be freed by the OS. * \param qry Query object to process. */ void ldapqry_free( LdapQuery *qry ) { @@ -957,7 +944,7 @@ gint ldapqry_read_data_th( LdapQuery *qry ) { * to prevent joining threads. * \param qry Query object to process. */ -void ldapqry_join_thread( LdapQuery *qry ) { +void ldapqry_join_threadX( LdapQuery *qry ) { g_return_if_fail( qry != NULL ); /* Wait for thread */ @@ -968,7 +955,7 @@ void ldapqry_join_thread( LdapQuery *qry ) { /** * Cleanup LDAP thread data. This function will be called when each thread - * exits. + * exits. Note that the thread object will be freed by the kernel. * \param ptr Pointer to object being destroyed (a query object in this case). */ static void ldapqry_destroyer( void * ptr ) { @@ -984,10 +971,6 @@ static void ldapqry_destroyer( void * ptr ) { ldapctl_free( qry->control ); } qry->control = NULL; - - if( qry->thread ) { - g_free( qry->thread ); - } qry->thread = NULL; ldapqry_set_busy_flag( qry, FALSE ); /* diff --git a/src/ldapquery.h b/src/ldapquery.h index 34bb71225..0ae878be3 100644 --- a/src/ldapquery.h +++ b/src/ldapquery.h @@ -94,7 +94,6 @@ void ldapqry_set_callback_start ( LdapQuery *qry, void *func ); void ldapqry_set_callback_entry ( LdapQuery *qry, void *func ); void ldapqry_set_callback_end ( LdapQuery *qry, void *func ); void ldapqry_clear ( LdapQuery *qry ); -void ldapqry_release_thread ( LdapQuery *qry ); void ldapqry_free ( LdapQuery *qry ); void ldapqry_print ( const LdapQuery *qry, FILE *stream ); void ldapqry_set_stop_flag ( LdapQuery *qry, const gboolean value ); diff --git a/src/ldapserver.c b/src/ldapserver.c index b091e5392..33915ac81 100644 --- a/src/ldapserver.c +++ b/src/ldapserver.c @@ -43,22 +43,34 @@ #include "adbookbase.h" /** - * Create new LDAP server interface object. + * Create new LDAP server interface object with no control object. * \return Initialized LDAP server object. */ -LdapServer *ldapsvr_create() { +LdapServer *ldapsvr_create_noctl( void ) { LdapServer *server; server = g_new0( LdapServer, 1 ); server->type = ADBOOKTYPE_LDAP; server->addressCache = addrcache_create(); server->retVal = MGU_SUCCESS; - server->control = ldapctl_create(); + server->control = NULL; server->listQuery = NULL; server->searchFlag = FALSE; return server; } +/** + * Create new LDAP server interface object. + * \return Initialized LDAP server object. + */ +LdapServer *ldapsvr_create( void ) { + LdapServer *server; + + server = ldapsvr_create(); + server->control = ldapctl_create(); + return server; +} + /** * Return name of server. * \param server Server object. @@ -204,6 +216,38 @@ static void ldapsvr_release_control( LdapServer *server ) { server->control = NULL; } +/** + * Free all queries. + * \param server Server object. + */ +void ldapsvr_free_all_query( LdapServer *server ) { + GList *node; + g_return_if_fail( server != NULL ); + + node = server->listQuery; + while( node ) { + LdapQuery *qry = node->data; + ldapqry_free( qry ); + node->data = NULL; + node = g_list_next( node ); + } + g_list_free( server->listQuery ); + server->listQuery = NULL; +} + +/** + * Add query to server. + * \param server Server object. + * \param qry Query object. + */ +void ldapsvr_add_query( LdapServer *server, LdapQuery *qry ) { + g_return_if_fail( server != NULL ); + g_return_if_fail( qry != NULL ); + + server->listQuery = g_list_append( server->listQuery, qry ); + qry->server = server; +} + /** * Free up LDAP server interface object by releasing internal memory. * \param server Server object. @@ -223,6 +267,9 @@ void ldapsvr_free( LdapServer *server ) { ldapctl_free( server->control ); server->control = NULL; + /* Free all queries */ + ldapsvr_free_all_query( server ); + /* Clear pointers */ server->type = ADBOOKTYPE_NONE; server->addressCache = NULL; @@ -269,38 +316,6 @@ void ldapsvr_print_data( LdapServer *server, FILE *stream ) { } } -/** - * Add query to server. - * \param server Server object. - * \param qry Query object. - */ -void ldapsvr_add_query( LdapServer *server, LdapQuery *qry ) { - g_return_if_fail( server != NULL ); - g_return_if_fail( qry != NULL ); - - server->listQuery = g_list_append( server->listQuery, qry ); - qry->server = server; -} - -/** - * Free all queries. - * \param server Server object. - */ -void ldapsvr_free_all_query( LdapServer *server ) { - GList *node; - g_return_if_fail( server != NULL ); - - node = server->listQuery; - while( node ) { - LdapQuery *qry = node->data; - ldapqry_free( qry ); - node->data = NULL; - node = g_list_next( node ); - } - g_list_free( server->listQuery ); - server->listQuery = NULL; -} - /** * Return link list of persons. * \param server Server object. @@ -341,14 +356,16 @@ void ldapsvr_execute_query( LdapServer *server, LdapQuery *qry ) { ldapqry_initialize(); /* Perform query */ - printf( "ldapsvr_execute_query::reading with thread...\n" ); + /* printf( "ldapsvr_execute_query::reading with thread...\n" ); */ if( ldapqry_check_search( qry ) ) { ldapqry_read_data_th( qry ); + /* if( qry->retVal == LDAPRC_SUCCESS ) { printf( "ldapsvr_execute_query::SUCCESS with thread...\n" ); } + */ } - printf( "ldapsvr_execute_query... terminated\n" ); + /* printf( "ldapsvr_execute_query... terminated\n" ); */ } /** diff --git a/src/ldapserver.h b/src/ldapserver.h index e18e4d152..aa72775be 100644 --- a/src/ldapserver.h +++ b/src/ldapserver.h @@ -52,10 +52,12 @@ struct _LdapServer { }; /* Function prototypes */ +LdapServer *ldapsvr_create_noctl( void ); LdapServer *ldapsvr_create ( void ); void ldapsvr_set_name ( LdapServer *server, const gchar *value ); void ldapsvr_set_accessed ( LdapServer *server, const gboolean value ); void ldapsvr_force_refresh ( LdapServer *server ); +void ldapsvr_free_all_query ( LdapServer *server ); void ldapsvr_free ( LdapServer *server ); gint ldapsvr_get_status ( LdapServer *server ); gboolean ldapsvr_get_accessed ( LdapServer *server );