ID:               37194
 User updated by:  ysuzuki at zend dot co dot jp
 Reported By:      ysuzuki at zend dot co dot jp
 Status:           Open
 Bug Type:         Informix related
 Operating System: RedHat Linux
 PHP Version:      4.4.2
 New Comment:

Sorry, Bug fixed right code is here.

#if (ESQLC_VERSION >= 720 || (ESQLC_VERSION >= 501 && ESQLC_VERSION <
600))
        SqlFreeMem(s_da, SQLDA_FREE);
#else <-- *** I added this line ***
        free(s_da);
#endif


Previous Comments:
------------------------------------------------------------------------

[2006-04-26 02:14:08] ysuzuki at zend dot co dot jp

If itÂ’s not match condition as follows, it will never free Informix
memory, I think.

(ESQLC_VERSION >= 720 || (ESQLC_VERSION >= 501 && ESQLC_VERSION < 600)

I changed this portion is the following. After that, This problem was
fixed. I believe this modification is right code. Please take it.

#if (ESQLC_VERSION >= 720 || (ESQLC_VERSION >= 501 && ESQLC_VERSION <
600))
        SqlFreeMem(s_da, SQLDA_FREE);
      } else {
#else
            free(s_da);
#endif

------------------------------------------------------------------------

[2006-04-25 09:14:47] ysuzuki at zend dot co dot jp

Description:
------------
Our developers created a sample code by using the following functions.

--- ifx_connect(), ifx_query(), ifx_free_result(), ifx_close()

This sample program is very simple such as connect to Infomix DB and
then issue some query string, get query result, and finally disconnect
Informix DB. They executed this sample php code several times. Then,
they found a problem that HTTPD used memory was increased. This is kind
of memory leak problem.

They also investigated php_initfx_count_descriptors() function.

 

static php_initfx_count_descriptors(char *p_statemid TSRMLS_DC)
{
      EXEC SQL BEGIN DECLARE SECTION;
      char *statemid = p_statemid;
      EXEC SQL END DECLARE SECTION;

      struct sqlda *s_da;
      int ret = 384;
  
      EXEC SQL DESCRIBE :statemid INTO s_da;
 
      If(ifx_check()) >= 0)   {
           ret = s_da->sqlid;
           /*
*Thanks to DBD-Informix
*/
#if (ESQLC_VERSION >= 720 || (ESQLC_VERSION >= 501 && ESQLC_VERSION <
600))
        SqlFreeMem(s_da, SQLDA_FREE);
      } else {
            free(s_da);
#endif
      }

      return ret;
}




------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=37194&edit=1

Reply via email to