| static int |
| _mysql_ConnectionObject_Initialize( |
| _mysql_ConnectionObject *self, |
| PyObject *args, |
| PyObject *kwargs) |
| { |
| MYSQL *conn = NULL; |
| PyObject *conv = NULL; |
| PyObject *ssl = NULL; |
| #if HAVE_OPENSSL |
| char *key = NULL, *cert = NULL, *ca = NULL, |
| *capath = NULL, *cipher = NULL; |
| #endif |
| char *host = NULL, *user = NULL, *passwd = NULL, |
| *db = NULL, *unix_socket = NULL; |
| unsigned int port = 0; |
| unsigned int client_flag = 0; |
| static char *kwlist[] = { "host", "user", "passwd", "db", "port", |
| "unix_socket", "conv", |
| "connect_timeout", "compress", |
| "named_pipe", "init_command", |
| "read_default_file", "read_default_group", |
| "client_flag", "ssl", |
| "local_infile", |
| #ifdef HAVE_MYSQL_OPT_TIMEOUTS |
| "read_timeout", |
| "write_timeout", |
| #endif |
| NULL } ; |
| int connect_timeout = 0; |
| #ifdef HAVE_MYSQL_OPT_TIMEOUTS |
| int read_timeout = 0; |
| int write_timeout = 0; |
| #endif |
| int compress = -1, named_pipe = -1, local_infile = -1; |
| char *init_command=NULL, |
| *read_default_file=NULL, |
| *read_default_group=NULL; |
| self->converter = NULL; |
| self->open = 0; |
| check_server_init(-1); |
| if (!PyArg_ParseTupleAndKeywords(args, kwargs, |
| #ifdef HAVE_MYSQL_OPT_TIMEOUTS |
| "|ssssisOiiisssiOiii:connect", |
| #else |
| "|ssssisOiiisssiOi:connect", |
| #endif |
| kwlist, |
| &host, &user, &passwd, &db, |
| &port, &unix_socket, &conv, |
| &connect_timeout, |
| &compress, &named_pipe, |
| &init_command, &read_default_file, |
| &read_default_group, |
| &client_flag, &ssl, |
| &local_infile |
| #ifdef HAVE_MYSQL_OPT_TIMEOUTS |
| , &read_timeout |
| , &write_timeout |
| #endif |
| )) |
| return -1; |
| #define _stringsuck(d,t,s) {t=PyMapping_GetItemString(s,#d);\ |
| if(t){d=get_string(t);Py_DECREF(t);}\ |
| PyErr_Clear();} |
| if (ssl) { |
| #if HAVE_OPENSSL |
| PyObject *value = NULL; |
| _stringsuck(ca, value, ssl); |
| _stringsuck(capath, value, ssl); |
| _stringsuck(cert, value, ssl); |
| _stringsuck(key, value, ssl); |
| _stringsuck(cipher, value, ssl); |
| #else |
| PyErr_SetString(_mysql_NotSupportedError, |
| "client library does not have SSL support"); |
| return -1; |
| #endif |
| } |
| Py_BEGIN_ALLOW_THREADS ; |
| conn = mysql_init(&(self->connection)); |
| if (connect_timeout) { |
| unsigned int timeout = connect_timeout; |
| mysql_options(&(self->connection), MYSQL_OPT_CONNECT_TIMEOUT, |
| (char *)&timeout); |
| } |
| #ifdef HAVE_MYSQL_OPT_TIMEOUTS |
| if (read_timeout) { |
| unsigned int timeout = read_timeout; |
| mysql_options(&(self->connection), MYSQL_OPT_READ_TIMEOUT, |
| (char *)&timeout); |
| } |
| if (write_timeout) { |
| unsigned int timeout = write_timeout; |
| mysql_options(&(self->connection), MYSQL_OPT_WRITE_TIMEOUT, |
| (char *)&timeout); |
| } |
| #endif |
| if (compress != -1) { |
| mysql_options(&(self->connection), MYSQL_OPT_COMPRESS, 0); |
| client_flag |= CLIENT_COMPRESS; |
| } |
| if (named_pipe != -1) |
| mysql_options(&(self->connection), MYSQL_OPT_NAMED_PIPE, 0); |
| if (init_command != NULL) |
| mysql_options(&(self->connection), MYSQL_INIT_COMMAND, init_command); |
| if (read_default_file != NULL) |
| mysql_options(&(self->connection), MYSQL_READ_DEFAULT_FILE, read_default_file); |
| if (read_default_group != NULL) |
| mysql_options(&(self->connection), MYSQL_READ_DEFAULT_GROUP, read_default_group); |
| if (local_infile != -1) |
| mysql_options(&(self->connection), MYSQL_OPT_LOCAL_INFILE, (char *) &local_infile); |
| #if HAVE_OPENSSL |
| if (ssl) |
| mysql_ssl_set(&(self->connection), |
| key, cert, ca, capath, cipher); |
| #endif |
| conn = mysql_real_connect(&(self->connection), host, user, passwd, db, |
| port, unix_socket, client_flag); |
| Py_END_ALLOW_THREADS ; |
| if (!conn) { |
| _mysql_Exception(self); |
| return -1; |
| } |
| /* Internal references to python-land objects */ |
| if (!conv) |
| conv = PyDict_New(); |
| else |
| Py_INCREF(conv); |
| if (!conv) |
| return -1; |
| self->converter = conv; |
| /* |
| PyType_GenericAlloc() automatically sets up GC allocation and |
| tracking for GC objects, at least in 2.2.1, so it does not need to |
| be done here. tp_dealloc still needs to call PyObject_GC_UnTrack(), |
| however. |
| */ |
| self->open = 1; |
| return 0; |
| } |
was expecting final owned ob_refcnt of new ref from (unknown) _mysql_Exception to be 0 since nothing references it but final ob_refcnt is refs: 1 owned
found 8 similar trace(s) to this
when considering range: -0x80000000 <= value <= -1
taking False path
when PyArg_ParseTupleAndKeywords() succeeds
taking False path
taking True path
when PyMapping_GetItemString() succeeds
taking True path
when taking True path
calling PyErr_Clear()
when PyMapping_GetItemString() succeeds
taking True path
when taking True path
calling PyErr_Clear()
when PyMapping_GetItemString() succeeds
taking True path
when taking True path
calling PyErr_Clear()
when PyMapping_GetItemString() succeeds
taking True path
when taking True path
calling PyErr_Clear()
when PyMapping_GetItemString() succeeds
taking True path
when taking True path
calling PyErr_Clear()
releasing the GIL by calling PyEval_SaveThread()
when considering range: -0x80000000 <= value <= -1
taking True path
when considering range: -0x80000000 <= value <= -1
taking True path
when considering range: -0x80000000 <= value <= -1
taking True path
when considering range: -0x80000000 <= value <= -2
taking True path
when considering range: -0x80000000 <= value <= -2
taking True path
when treating unknown const char * from _mysql.c:571 as non-NULL
taking True path
when treating unknown const char * from _mysql.c:571 as NULL
taking False path
when treating unknown const char * from _mysql.c:571 as non-NULL
taking True path
when considering range: 0 <= value <= 0x7fffffff
taking True path
taking True path
reacquiring the GIL by calling PyEval_RestoreThread()
when treating unknown struct MYSQL * from _mysql.c:653 as NULL
taking True path
when _mysql_Exception() succeeds
new ref from (unknown) _mysql_Exception was allocated at: _mysql_Exception(self);