Commit: 5ac7c533a0334f384d1a74eed6172a3c8cc4ef49
Author: Christopher Jones <s...@php.net> Thu, 26 Sep 2013 21:12:11
-0700
Parents: 8554800e7691f85275e650d0b88a3e4d35153e95
Branches: master
Link:
http://git.php.net/?p=php-src.git;a=commitdiff;h=5ac7c533a0334f384d1a74eed6172a3c8cc4ef49
Log:
More OCI8 DTrace probe updates.
Change php.ini-* doc to match an earlier change to config.w32
Changed paths:
M ext/oci8/config.m4
M ext/oci8/oci8.c
M ext/oci8/oci8_dtrace.d
M ext/oci8/oci8_interface.c
M ext/oci8/oci8_statement.c
M ext/oci8/package.xml
M ext/oci8/php_oci8.h
M ext/oci8/php_oci8_int.h
M php.ini-development
M php.ini-production
diff --git a/ext/oci8/config.m4 b/ext/oci8/config.m4
index 49998d1..3873a22 100644
--- a/ext/oci8/config.m4
+++ b/ext/oci8/config.m4
@@ -124,7 +124,7 @@ dnl in GNU Make which causes the .d file to be overwritten
(Bug 61268)
PHP_EXT_SRCDIR([oci8])/$ac_provsrc:;
$ac_bdir[$]ac_hdrobj: $ac_srcdir[$]ac_provsrc
- CFLAGS="\$(CFLAGS_CLEAN)" dtrace -h -C -s $ac_srcdir[$]ac_provsrc -o
\$[]@.bak && \$(SED) -e 's,PHP_,DTRACE_,g' \$[]@.bak > \$[]@
+ CFLAGS="\$(CFLAGS_CLEAN)" dtrace -h -C -s $ac_srcdir[$]ac_provsrc -o
\$[]@.bak && \$(SED) -e 's,PHPOCI_,DTRACE_,g' \$[]@.bak > \$[]@
\$(OCI8_DTRACE_OBJS): $ac_bdir[$]ac_hdrobj
diff --git a/ext/oci8/oci8.c b/ext/oci8/oci8.c
index bccaa52..f04114d 100644
--- a/ext/oci8/oci8.c
+++ b/ext/oci8/oci8.c
@@ -12,7 +12,7 @@
| obtain it through the world-wide-web, please send a note to |
| lice...@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
- | Authors: Stig S�ther Bakken <s...@php.net> |
+ | Authors: Stig Sæther Bakken <s...@php.net> |
| Thies C. Arntzen <th...@thieso.net> |
| Maxim Maletsky <ma...@maxim.cx> |
| |
@@ -2097,6 +2097,9 @@ php_oci_connection *php_oci_do_connect_ex(char *username,
int username_len, char
connection = (php_oci_connection *) ecalloc(1,
sizeof(php_oci_connection));
connection->hash_key = estrndup(hashed_details.c,
hashed_details.len);
connection->is_persistent = 0;
+#ifdef HAVE_OCI8_DTRACE
+ connection->client_id = NULL;
+#endif
} else {
connection = (php_oci_connection *) calloc(1,
sizeof(php_oci_connection));
if (connection == NULL) {
@@ -2108,11 +2111,17 @@ php_oci_connection *php_oci_do_connect_ex(char
*username, int username_len, char
return NULL;
}
connection->is_persistent = 1;
+#ifdef HAVE_OCI8_DTRACE
+ connection->client_id = NULL;
+#endif
}
} else {
connection = (php_oci_connection *) ecalloc(1,
sizeof(php_oci_connection));
connection->hash_key = estrndup(hashed_details.c,
hashed_details.len);
connection->is_persistent = 0;
+#ifdef HAVE_OCI8_DTRACE
+ connection->client_id = NULL;
+#endif
}
/* {{{ Get the session pool that suits this connection request from the
persistent list. This
@@ -2366,17 +2375,15 @@ static int php_oci_connection_close(php_oci_connection
*connection TSRMLS_DC)
php_oci_spool_close(connection->private_spool TSRMLS_CC);
}
- if (connection->is_persistent) {
- if (connection->hash_key) {
- free(connection->hash_key);
- }
- free(connection);
- } else {
- if (connection->hash_key) {
- efree(connection->hash_key);
- }
- efree(connection);
+ if (connection->hash_key) {
+ pefree(connection->hash_key, connection->is_persistent);
+ }
+#ifdef HAVE_OCI8_DTRACE
+ if (connection->client_id) {
+ pefree(connection->client_id, connection->is_persistent);
}
+#endif /* HAVE_OCI8_DTRACE */
+ pefree(connection, connection->is_persistent);
connection = NULL;
OCI_G(in_call) = in_call_save;
return result;
@@ -2463,6 +2470,12 @@ int php_oci_connection_release(php_oci_connection
*connection TSRMLS_DC)
* the OCI session
*/
connection->next_pingp = NULL;
+#ifdef HAVE_OCI8_DTRACE
+ if (connection->client_id) {
+ pefree(connection->client_id,
connection->is_persistent);
+ connection->client_id = NULL;
+ }
+#endif /* HAVE_OCI8_DTRACE */
}
OCI_G(in_call) = in_call_save;
@@ -3500,7 +3513,7 @@ void php_oci_dtrace_check_connection(php_oci_connection
*connection, sb4 errcode
{
#ifdef HAVE_OCI8_DTRACE
if (DTRACE_OCI8_CHECK_CONNECTION_ENABLED()) {
- DTRACE_OCI8_CHECK_CONNECTION(connection, connection &&
connection->is_open ? 1 : 0, (long)errcode, (unsigned long)serverStatus);
+ DTRACE_OCI8_CHECK_CONNECTION(connection, connection->client_id,
connection->is_open ? 1 : 0, (long)errcode, (unsigned long)serverStatus);
}
#endif /* HAVE_OCI8_DTRACE */
}
diff --git a/ext/oci8/oci8_dtrace.d b/ext/oci8/oci8_dtrace.d
index 8ac9410..30c98de 100644
--- a/ext/oci8/oci8_dtrace.d
+++ b/ext/oci8/oci8_dtrace.d
@@ -16,14 +16,14 @@
+----------------------------------------------------------------------+
*/
-provider php {
- probe oci8__check__connection(void *connection, int is_open, long
errcode, unsigned long server_status);
+provider phpoci {
+ probe oci8__check__connection(void *connection, char *client_id, int
is_open, long errcode, unsigned long server_status);
probe oci8__connect__entry(char *username, char *dbname, char *charset,
long session_mode, int persistent, int exclusive);
probe oci8__connect__return(void *connection);
probe oci8__connection__close(void *connection);
probe oci8__error(int status, long errcode);
- probe oci8__execute__mode(void *connection, unsigned int mode);
- probe oci8__sqltext(void *connection, char *sql);
+ probe oci8__execute__mode(void *connection, char *client_id, void
*statement, unsigned int mode);
+ probe oci8__sqltext(void *connection, char *client_id, void *statement,
char *sql);
probe oci8__connect__p__dtor__close(void *connection);
probe oci8__connect__p__dtor__release(void *connection);
diff --git a/ext/oci8/oci8_interface.c b/ext/oci8/oci8_interface.c
index 8d70aff..3fad90d 100644
--- a/ext/oci8/oci8_interface.c
+++ b/ext/oci8/oci8_interface.c
@@ -1772,6 +1772,30 @@ PHP_FUNCTION(oci_set_client_identifier)
RETURN_FALSE;
}
+#ifdef HAVE_OCI8_DTRACE
+ /* The alternatives to storing client_id like done below are
+ i) display it in a probe here in oci_set_client_identifier and
+ let the user D script correlate the connection address probe
+ argument and the client_id. This would likely require user D
+ script variables, which would use kernel memory.
+ ii) call OCIAttrGet for each probe definition that uses
+ client_id. This would be slower than storing it.
+ */
+
+ if (connection->client_id) {
+ pefree(connection->client_id, connection->is_persistent);
+ }
+
+ if (client_id) {
+ /* this long winded copy allows compatibility with older PHP
versions */
+ connection->client_id = (char *)safe_emalloc(client_id_len+1,
sizeof(char), connection->is_persistent);
+ memcpy(connection->client_id, client_id, client_id_len);
+ connection->client_id[client_id_len] = '\0';
+ } else {
+ connection->client_id = NULL;
+ }
+#endif /* HAVE_OCI8_DTRACE */
+
RETURN_TRUE;
}
/* }}} */
@@ -1790,13 +1814,14 @@ PHP_FUNCTION(oci_set_edition)
if (OCI_G(edition)) {
efree(OCI_G(edition));
- OCI_G(edition) = NULL;
}
if (edition) {
- OCI_G(edition) = (char *)safe_emalloc(edition_len+1,
sizeof(text), 0);
+ OCI_G(edition) = (char *)safe_emalloc(edition_len+1,
sizeof(char), 0);
memcpy(OCI_G(edition), edition, edition_len);
OCI_G(edition)[edition_len] = '\0';
+ } else {
+ OCI_G(edition) = NULL;
}
RETURN_TRUE;
diff --git a/ext/oci8/oci8_statement.c b/ext/oci8/oci8_statement.c
index 274c4e9..1e66308 100644
--- a/ext/oci8/oci8_statement.c
+++ b/ext/oci8/oci8_statement.c
@@ -55,14 +55,8 @@ php_oci_statement
*php_oci_statement_create(php_oci_connection *connection, char
if (!query_len) {
/* do not allocate stmt handle for refcursors, we'll get it
from OCIStmtPrepare2() */
PHP_OCI_CALL(OCIHandleAlloc, (connection->env, (dvoid
**)&(statement->stmt), OCI_HTYPE_STMT, 0, NULL));
- } else {
-#ifdef HAVE_OCI8_DTRACE
- if (DTRACE_OCI8_SQLTEXT_ENABLED()) {
- DTRACE_OCI8_SQLTEXT(connection, query);
- }
-#endif /* HAVE_OCI8_DTRACE */
}
-
+
PHP_OCI_CALL(OCIHandleAlloc, (connection->env, (dvoid
**)&(statement->err), OCI_HTYPE_ERROR, 0, NULL));
if (query_len > 0) {
@@ -79,6 +73,12 @@ php_oci_statement
*php_oci_statement_create(php_oci_connection *connection, char
OCI_DEFAULT
)
);
+#ifdef HAVE_OCI8_DTRACE
+ if (DTRACE_OCI8_SQLTEXT_ENABLED()) {
+ DTRACE_OCI8_SQLTEXT(connection, connection->client_id,
statement, query);
+ }
+#endif /* HAVE_OCI8_DTRACE */
+
if (errstatus != OCI_SUCCESS) {
connection->errcode = php_oci_error(connection->err,
errstatus TSRMLS_CC);
@@ -498,7 +498,7 @@ int php_oci_statement_execute(php_oci_statement *statement,
ub4 mode TSRMLS_DC)
/* only these are allowed */
#ifdef HAVE_OCI8_DTRACE
if (DTRACE_OCI8_EXECUTE_MODE_ENABLED()) {
- DTRACE_OCI8_EXECUTE_MODE(statement->connection,
mode);
+ DTRACE_OCI8_EXECUTE_MODE(statement->connection,
statement->connection->client_id, statement, mode);
}
#endif /* HAVE_OCI8_DTRACE */
break;
diff --git a/ext/oci8/package.xml b/ext/oci8/package.xml
index fcab20c..24ba635 100644
--- a/ext/oci8/package.xml
+++ b/ext/oci8/package.xml
@@ -40,12 +40,12 @@ http://pear.php.net/dtd/package-2.0.xsd">
<active>no</active>
</lead>
- <date>2013-09-06</date>
+ <date>2013-09-27</date>
<time>12:00:00</time>
<version>
- <release>2.0.2</release>
- <api>2.0.2</api>
+ <release>2.0.3</release>
+ <api>2.0.3</api>
</version>
<stability>
<release>devel</release>
@@ -53,10 +53,9 @@ http://pear.php.net/dtd/package-2.0.xsd">
</stability>
<license uri="http://www.php.net/license">PHP</license>
<notes>
-Review and improve error handling code and data types.
-Fix oci_set_*($connection, ...) error handling so oci_error($connection) works.
-Add DTrace oci8-connection-close probe
-Add the connection handle to several DTrace probes.
+Add the oci_set_client_identifier() value and statement structure pointer to
several DTrace probes.
+Use 'phpoci' as the DTrace provider name since uniqueness is required by the
Linux fasttrap module.
+Update Windows builds to create only php_oci8_12c.dll.
</notes>
<contents>
<dir name="/">
@@ -457,6 +456,24 @@ Add the connection handle to several DTrace probes.
<release>
<version>
+ <release>2.0.2</release>
+ <api>2.0.2</api>
+ </version>
+ <stability>
+ <release>devel</release>
+ <api>devel</api>
+ </stability>
+ <license uri="http://www.php.net/license">PHP</license>
+ <notes>
+Review and improve error handling code and data types.
+Fix oci_set_*($connection, ...) error handling so oci_error($connection) works.
+Add DTrace oci8-connection-close probe
+Add the connection handle to several DTrace probes.
+ </notes>
+</release>
+
+<release>
+ <version>
<release>2.0.1</release>
<api>2.0.1</api>
</version>
diff --git a/ext/oci8/php_oci8.h b/ext/oci8/php_oci8.h
index 8c5fba9..6d02eff 100644
--- a/ext/oci8/php_oci8.h
+++ b/ext/oci8/php_oci8.h
@@ -46,7 +46,7 @@
*/
#undef PHP_OCI8_VERSION
#endif
-#define PHP_OCI8_VERSION "2.0.2-dev"
+#define PHP_OCI8_VERSION "2.0.3-dev"
extern zend_module_entry oci8_module_entry;
#define phpext_oci8_ptr &oci8_module_entry
diff --git a/ext/oci8/php_oci8_int.h b/ext/oci8/php_oci8_int.h
index 6155a88..2d4ff26 100644
--- a/ext/oci8/php_oci8_int.h
+++ b/ext/oci8/php_oci8_int.h
@@ -156,6 +156,9 @@ typedef struct {
time_t idle_expiry; /* time
when the connection will be considered as expired */
time_t *next_pingp; /*
(pointer to) time of the next ping */
char *hash_key; /*
hashed details of the connection */
+#ifdef HAVE_OCI8_DTRACE
+ char *client_id; /* The
oci_set_client_identifier() value */
+#endif
} php_oci_connection;
/* }}} */
diff --git a/php.ini-development b/php.ini-development
index beebabb..cc1cae2 100644
--- a/php.ini-development
+++ b/php.ini-development
@@ -884,8 +884,7 @@ default_socket_timeout = 60
;extension=php_exif.dll ; Must be after mbstring as it depends on it
;extension=php_mysql.dll
;extension=php_mysqli.dll
-;extension=php_oci8.dll ; Use with Oracle 10gR2 Instant Client
-;extension=php_oci8_11g.dll ; Use with Oracle 11gR2 Instant Client
+;extension=php_oci8_12c.dll ; Use with Oracle Database 12c Instant Client
;extension=php_openssl.dll
;extension=php_pdo_firebird.dll
;extension=php_pdo_mysql.dll
diff --git a/php.ini-production b/php.ini-production
index 5a95344..8ed89c7 100644
--- a/php.ini-production
+++ b/php.ini-production
@@ -884,8 +884,7 @@ default_socket_timeout = 60
;extension=php_exif.dll ; Must be after mbstring as it depends on it
;extension=php_mysql.dll
;extension=php_mysqli.dll
-;extension=php_oci8.dll ; Use with Oracle 10gR2 Instant Client
-;extension=php_oci8_11g.dll ; Use with Oracle 11gR2 Instant Client
+;extension=php_oci8_12c.dll ; Use with Oracle Database 12c Instant Client
;extension=php_openssl.dll
;extension=php_pdo_firebird.dll
;extension=php_pdo_mysql.dll
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php