List:General Discussion« Previous MessageNext Message »
From:Miguel Cardenas Date:September 20 2005 3:49pm
Subject:Re: mysql_free_result() & 2 different connections
View as plain text  
> > I have 2 different result sets, since are two different connections to
> > the server, simultaneous but independent (two handles, two connections,
> > two different queries)
>
> what is the code you're using ?

in a very small representation the program is this

*** dbmail and dbmail2 open 2 different connections, one accesses 
DBM_ADDRESSES table and the other accesses DBM_NAMES table. The first one 
retrieves addresses from the table DBM_ADDRESSES, the second one a relationed 
names to the addresses from DBM_NAMES. Not all addresses have name set, so 
for questions of space I separated into tables, just 10% of addresses have a 
name and it would be waste of space having that column in the same table 
(90%+ of over 50,000 rows), so I created a new table for the names and linked 
them to a corresponding address via an 'id'

DBM_ADDRESSES
id, address, ...

DBM_NAMES
id,name

1. connect dbmail and dbmail2 to server
2. dbmail.query:   SELECT id,address from DBM_ADDRESSES WHERE ...
    sp_id = atoll(record[0]); // stores the id in 'sp_id'
3. while ( dbmail retrieves rows from query at step 2 ) {
   dbmail2.query:
   3.1 SELECT name FROM DBM_NAMES WHERE id=sp_id(from step 2)
   3.2 if ( name exists for id=sp_id )
           do something with DBM_ADDRESSES.address,DBM_NAMES.name
        else
           do something with DBM_ADDRESSES.address
   3.3 free results from dbmail2.query (inside while)
   }
4. free results from dbmail.query (1st query before while) ***CRASH***
5. disconnect dbmail and dbmail2 connections

The crash is in step #4 after  all data is retrieved successfully, but why? 
every loop in the while is performed a query/free without problems, but the 
most external unique query does not accept mysql_free_result(), even when 
they are two different connections to the server.

I've just tested with a single query program (one connection with one query) 
and it crashed too when I mysql_free_result() ***called only once*** after 
retrieving all rows:

1. query: SELECT ...
2. while ( fetch rows ) { use the results }
3. mysql_free_result()

it crashes too, this model is very (really very simple) and does not leave 
space for errors in code and still fails on the free function...

I've asked on a linux list and somebody told me just to avoid using 
mysql_free_result() if the program works that way ('cos the results maybe are 
being already free by the library), but I don't think it is a solution, I 
want to know what happens, if really the set is free automatically by the C 
API functions after reading it or not, and if so, why the documentation tells 
that it is a *must* call the free function after the whole set of rows is 
retrieved...

Thanks for your comments

Thread
mysql_free_result() & 2 different connectionsMiguel Cardenas17 Sep
  • Re: mysql_free_result() & 2 different connectionsPooly18 Sep
    • mysql_free_result() CRASHESMiguel Cardenas18 Sep
    • Re: mysql_free_result() & 2 different connectionsMiguel Cardenas20 Sep
      • Re: mysql_free_result() & 2 different connectionsPooly20 Sep
        • Re: mysql_free_result() & 2 different connectionsMiguel Cardenas20 Sep
          • Re: mysql_free_result() & 2 different connectionsPooly20 Sep
            • Re: mysql_free_result() & 2 different connectionsMiguel Cardenas21 Sep
              • Re: mysql_free_result() & 2 different connectionsPooly21 Sep
                • Re: mysql_free_result() & 2 different connectionsMiguel Cardenas22 Sep