1--TEST--
2mysql_pconnect() - killing persitent connection
3--SKIPIF--
4<?php
5require_once('skipif.inc');
6require_once('skipifconnectfailure.inc');
7?>
8--INI--
9mysql.allow_persistent=1
10mysql.max_persistent=2
11--FILE--
12<?php
13	include "connect.inc";
14	include "table.inc";
15
16	if ($socket)
17		$myhost = sprintf("%s:%s", $host, $socket);
18	else if ($port)
19		$myhost = sprintf("%s:%s", $host, $port);
20	else
21		$myhost = $host;
22
23	if (!($plink = mysql_pconnect($myhost, $user, $passwd)))
24		printf("[001] Cannot connect to the server using host=%s/%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n",
25			$host, $myhost, $user, $db, $port, $socket);
26	mysql_select_db($db, $plink);
27
28	$pthread_id = mysql_thread_id($plink);
29	$thread_id = mysql_thread_id($link);
30
31	if (!($res = mysql_query("SHOW FULL PROCESSLIST", $link)))
32		printf("[002] Cannot get processlist, [%d] %s\n", mysql_errno($link), mysql_error($link));
33
34	$processlist = array();
35	while ($row = mysql_fetch_assoc($res))
36		$processlist[$row['Id']] = $row;
37	mysql_free_result($res);
38
39	if (!isset($processlist[$thread_id]))
40		printf("[003] Cannot find regular connection thread in process list, [%d] %s\n", mysql_errno($link), mysql_error($link));
41	if (!isset($processlist[$pthread_id]))
42		printf("[004] Cannot find persistent connection thread in process list, [%d] %s\n", mysql_errno($link), mysql_error($link));
43
44	if (!mysql_query(sprintf("KILL %d", $pthread_id), $link))
45		printf("[005] Cannot kill persistent connection thread, [%d] %s\n", mysql_errno($link), mysql_error($link));
46
47	while (1) {
48		if (!($res = mysql_query("SHOW FULL PROCESSLIST", $link)))
49			printf("[006] Cannot get processlist, [%d] %s\n", mysql_errno($link), mysql_error($link));
50
51		$processlist2 = array();
52		while ($row = mysql_fetch_assoc($res))
53			$processlist2[$row['Id']] = $row;
54		mysql_free_result($res);
55		if (isset($processlist2[$pthread_id])) {
56			sleep(1);
57		} else {
58			break;
59		}
60	}
61
62	if (!isset($processlist2[$thread_id]))
63		printf("[007] Cannot find regular connection thread in process list, [%d] %s\n", mysql_errno($link), mysql_error($link));
64
65	mysql_close($plink);
66
67	/* mysql_pconnect cound generate a warning when linked against mysqlnd
68       PHP Warning:  mysql_pconnect(): MySQL server has gone away */
69	if (!($plink = @mysql_pconnect($myhost, $user, $passwd)))
70		printf("[009] Cannot create new persistent connection, [%d] %s\n", mysql_errno(), mysql_error());
71	mysql_select_db($db, $plink);
72
73	if (!($res = mysql_query("SELECT 1", $plink)))
74		printf("[010] Cannot run query on new persistent connection, [%d] %s\n", @mysql_errno($plink), @mysql_error($plink));
75	mysql_free_result($res);
76
77	var_dump(mysql_ping($plink));
78
79	if (!($res = mysql_query("SELECT 1", $plink)))
80		printf("[011] Cannot run query on new persistent connection, [%d] %s\n", @mysql_errno($plink), @mysql_error($plink));
81	mysql_free_result($res);
82
83	if (!($link2 = mysql_connect($myhost, $user, $passwd, true)))
84		printf("[012] Cannot connect to the server using host=%s/%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n",
85			$host, $myhost, $user, $db, $port, $socket);
86	mysql_select_db($db, $link2);
87	if (!mysql_query(sprintf("KILL %d", $thread_id), $link2))
88		printf("[013] Cannot kill regular connection thread, [%d] %s\n", mysql_errno($link2), mysql_error($link2));
89
90	if (!($link = mysql_connect($myhost, $user, $passwd, true)))
91		printf("[014] Cannot connect to the server using host=%s/%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n",
92			$host, $myhost, $user, $db, $port, $socket);
93	mysql_select_db($db, $link);
94	if (!($res = mysql_query("SELECT * FROM test", $link)))
95		printf("[015] Cannot run query on new regular connection, [%d] %s\n", @mysql_errno($link), @mysql_error($link));
96
97	if (!($res = mysql_query("SELECT * FROM test", $link2)))
98		printf("[016] Cannot run query on other regular connection, [%d] %s\n", @mysql_errno($link2), @mysql_error($link2));
99
100	mysql_free_result($res);
101	mysql_close($plink);
102	mysql_close($link);
103	mysql_close($link2);
104	print "done!";
105?>
106--CLEAN--
107<?php
108require_once("clean_table.inc");
109?>
110--EXPECTF--
111bool(true)
112done!
113