--TEST--
Bug #55473 (mysql_pconnect leaks file descriptors on reconnect)
--SKIPIF--
<?php
require_once('skipif.inc');
require_once(
'skipifconnectfailure.inc');
if (
defined('PHP_WINDOWS_VERSION_MAJOR')) {
    die(
"skip Test doesn't work on Windows");
}

if (!(
$output = @exec("lsof -nwp " getmypid())))
    die(
"skip Test can't find command line tool lsof");
?>
--INI--
mysql.max_persistent=30
mysql.allow_persistent=1
--FILE--
<?php
    
include "connect.inc";

    
$tmp    NULL;
    
$link   NULL;

     if (
$socket)
        
$host sprintf("%s:%s"$host$socket);
    else if (
$port)
        
$host sprintf("%s:%s"$host$port);

    function 
connect($host$user$passwd) {
        
$conn mysql_pconnect($host$user$passwd);

        if (!
$conn)
            die(
sprintf("[001] %s\n"mysql_error()));

        if (!
mysql_query("set wait_timeout=1"$conn))
            
printf("[002] [%d] %s\n"mysql_errno($conn), mysql_error($conn));

        return 
$conn;
    }    

    
$conn connect($host$user$passwd);
    
$opened_files = -1;

    for (
$i 0$i 4$i++) {
        
/* wait while mysql closes connection */
        
sleep(3);

        if (!
mysql_ping($conn)) {
            
printf("[003] reconnect %d\n"$i);
            
$conn connect($host$user$passwd);  
        }

        
$r mysql_query('select 1'$conn);
        if (!
$r)
            
printf("[004] [%d] %s\n"mysql_errno($conn), mysql_error($conn));


        if (
$opened_files == -1) {
            
$opened_files trim(exec("lsof -nwp " getmypid() . " | wc -l"));
            
printf("[005] Setting openened files...\n");
        } else if ((
$tmp trim(exec("lsof -nwp " getmypid() . " | wc -l"))) != $opened_files) {
            
printf("[006] [%d] different number of opened_files : expected %d, got %d"$i$opened_files$tmp);
        } else {
            
printf("[007] Opened files as expected\n");
        }
    }

    print 
"done!";
?>
--EXPECTF--
[003] reconnect 0
[005] Setting openened files...
[003] reconnect 1
[007] Opened files as expected
[003] reconnect 2
[007] Opened files as expected
[003] reconnect 3
[007] Opened files as expected
done!