conn->current_result = NULL;
}
- if (conn->net.stream) {
- DBG_INF_FMT("Freeing stream. abstract=%p", conn->net.stream->abstract);
- if (pers) {
- php_stream_free(conn->net.stream, PHP_STREAM_FREE_CLOSE_PERSISTENT | PHP_STREAM_FREE_RSRC_DTOR);
- } else {
- php_stream_free(conn->net.stream, PHP_STREAM_FREE_CLOSE);
-
- }
- conn->net.stream = NULL;
- }
#ifdef MYSQLND_COMPRESSION_ENABLED
- if (conn->net.uncompressed_data) {
- conn->net.uncompressed_data->free_buffer(&conn->net.uncompressed_data TSRMLS_CC);
+ if (conn->net->uncompressed_data) {
+ conn->net->uncompressed_data->free_buffer(&conn->net->uncompressed_data TSRMLS_CC);
}
#endif
-
DBG_INF("Freeing memory of members");
+
if (conn->host) {
DBG_INF("Freeing host");
mnd_pefree(conn->host, pers);
mnd_pefree(conn->last_message, pers);
conn->last_message = NULL;
}
- if (conn->net.cmd_buffer.buffer) {
- DBG_INF("Freeing cmd buffer");
- mnd_pefree(conn->net.cmd_buffer.buffer, pers);
- conn->net.cmd_buffer.buffer = NULL;
- }
-
conn->charset = NULL;
conn->greet_charset = NULL;
conn->m->free_contents(conn TSRMLS_CC);
conn->m->free_options(conn TSRMLS_CC);
+ if (conn->net) {
+ DBG_INF("Freeing net");
+ mysqlnd_net_free(conn->net TSRMLS_CC);
+ conn->net = NULL;
+ }
+
mnd_pefree(conn, conn->persistent);
DBG_VOID_RETURN;
MYSQLND_DEC_CONN_STATISTIC(&conn->stats, STAT_OPENED_PERSISTENT_CONNECTIONS);
}
/* Now reconnect using the same handle */
- if (conn->net.compressed) {
+ if (conn->net->compressed) {
/*
- we need to save the state. As we will re-connect, net.compressed should be off, or
+ we need to save the state. As we will re-connect, net->compressed should be off, or
we will look for a compression header as part of the greet message, but there will
be none.
*/
saved_compression = TRUE;
- conn->net.compressed = FALSE;
+ conn->net->compressed = FALSE;
}
}
}
CONN_SET_STATE(conn, CONN_ALLOCED);
- conn->net.packet_no = conn->net.compressed_envelope_packet_no = 0;
+ conn->net->packet_no = conn->net->compressed_envelope_packet_no = 0;
if (conn->options.timeout_connect) {
tv.tv_sec = conn->options.timeout_connect;
}
conn->scheme_len = strlen(conn->scheme);
DBG_INF(conn->scheme);
- conn->net.stream = php_stream_xport_create(conn->scheme, transport_len, streams_options, streams_flags,
+ conn->net->stream = php_stream_xport_create(conn->scheme, transport_len, streams_options, streams_flags,
hashed_details,
(conn->options.timeout_connect) ? &tv : NULL,
NULL /*ctx*/, &errstr, &errcode);
- DBG_INF_FMT("stream=%p", conn->net.stream);
+ DBG_INF_FMT("stream=%p", conn->net->stream);
- if (errstr || !conn->net.stream) {
+ if (errstr || !conn->net->stream) {
if (hashed_details) {
mnd_efree(hashed_details);
}
but STREAMS suck big time regarding persistent streams.
Just not compatible for extensions that need persistency.
*/
- conn->net.stream->in_free = 1;
+ conn->net->stream->in_free = 1;
zend_hash_del(&EG(persistent_list), hashed_details, hashed_details_len + 1);
- conn->net.stream->in_free = 0;
+ conn->net->stream->in_free = 0;
}
#if ZEND_DEBUG
/* Shut-up the streams, they don't know what they are doing */
- conn->net.stream->__exposed = 1;
+ conn->net->stream->__exposed = 1;
#endif
mnd_efree(hashed_details);
}
{
tv.tv_sec = conn->options.timeout_read;
tv.tv_usec = 0;
- php_stream_set_option(conn->net.stream, PHP_STREAM_OPTION_READ_TIMEOUT, 0, &tv);
+ php_stream_set_option(conn->net->stream, PHP_STREAM_OPTION_READ_TIMEOUT, 0, &tv);
}
if (!unix_socket) {
/* Set TCP_NODELAY */
- mysqlnd_set_sock_no_delay(conn->net.stream);
+ mysqlnd_set_sock_no_delay(conn->net->stream);
}
{
} else {
CONN_SET_STATE(conn, CONN_READY);
if (!self_alloced && saved_compression) {
- conn->net.compressed = TRUE;
+ conn->net->compressed = TRUE;
}
/*
If a connect on a existing handle is performed and mysql_flags is
passed which doesn't CLIENT_COMPRESS, then we need to overwrite the value
which we set based on saved_compression.
*/
- conn->net.compressed = mysql_flags & CLIENT_COMPRESS? TRUE:FALSE;
+ conn->net->compressed = mysql_flags & CLIENT_COMPRESS? TRUE:FALSE;
conn->user = pestrdup(user, conn->persistent);
conn->user_len = strlen(conn->user);
conn->scheme = NULL;
}
- /* This will also close conn->net.stream if it has been opened */
+ /* This will also close conn->net->stream if it has been opened */
conn->m->free_contents(conn TSRMLS_CC);
MYSQLND_INC_CONN_STATISTIC(&conn->stats, STAT_CONNECT_FAILURE);
* when casting. It is only used here so that the buffered data warning
* is not displayed.
* */
- if (SUCCESS == php_stream_cast((*p)->net.stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL,
+ if (SUCCESS == php_stream_cast((*p)->net->stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL,
(void*)&this_fd, 1) && this_fd >= 0) {
PHP_SAFE_FD_SET(this_fd, fds);
MYSQLND **fwd = conn_array, **bckwd = conn_array;
while (*fwd) {
- if (SUCCESS == php_stream_cast((*fwd)->net.stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL,
+ if (SUCCESS == php_stream_cast((*fwd)->net->stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL,
(void*)&this_fd, 1) && this_fd >= 0) {
if (PHP_SAFE_FD_ISSET(this_fd, fds)) {
if (disproportion) {
enum_func_status ret = PASS;
DBG_ENTER("mysqlnd_send_close");
- DBG_INF_FMT("conn=%llu conn->net.stream->abstract=%p",
- conn->thread_id, conn->net.stream? conn->net.stream->abstract:NULL);
+ DBG_INF_FMT("conn=%llu conn->net->stream->abstract=%p",
+ conn->thread_id, conn->net->stream? conn->net->stream->abstract:NULL);
switch (CONN_GET_STATE(conn)) {
case CONN_READY:
DBG_INF("Connection clean, sending COM_QUIT");
- if (conn->net.stream) {
+ if (conn->net->stream) {
ret = conn->m->simple_command(conn, COM_QUIT, NULL, 0, PROT_LAST, TRUE, TRUE TSRMLS_CC);
}
/* Do nothing */
if (*(unsigned int*) value < MYSQLND_NET_CMD_BUFFER_MIN_SIZE) {
DBG_RETURN(FAIL);
}
- conn->net.cmd_buffer.length = *(unsigned int*) value;
- DBG_INF_FMT("new_length=%u", conn->net.cmd_buffer.length);
- if (!conn->net.cmd_buffer.buffer) {
- conn->net.cmd_buffer.buffer = mnd_pemalloc(conn->net.cmd_buffer.length, conn->persistent);
+ conn->net->cmd_buffer.length = *(unsigned int*) value;
+ DBG_INF_FMT("new_length=%u", conn->net->cmd_buffer.length);
+ if (!conn->net->cmd_buffer.buffer) {
+ conn->net->cmd_buffer.buffer = mnd_pemalloc(conn->net->cmd_buffer.length, conn->net->persistent);
} else {
- conn->net.cmd_buffer.buffer = mnd_perealloc(conn->net.cmd_buffer.buffer,
- conn->net.cmd_buffer.length,
- conn->persistent);
+ conn->net->cmd_buffer.buffer = mnd_perealloc(conn->net->cmd_buffer.buffer,
+ conn->net->cmd_buffer.length,
+ conn->net->persistent);
}
break;
case MYSQLND_OPT_NET_READ_BUFFER_SIZE:
ret->m = mysqlnd_conn_methods;
ret->m->get_reference(ret TSRMLS_CC);
- ret->net.stream_read = mysqlnd_read_from_stream;
- ret->net.stream_write = mysqlnd_stream_write;
+ ret->net = mysqlnd_net_init(persistent TSRMLS_CC);
DBG_RETURN(ret);
}
off.
*/
char tmp_buf[256];
- MYSQLND_NET *net = &conn->net;
+ MYSQLND_NET *net = conn->net;
size_t skipped_bytes = 0;
int opt = PHP_STREAM_OPTION_BLOCKING;
int was_blocked = net->stream->ops->set_option(net->stream, opt, 0, NULL TSRMLS_CC);
/* {{{ mysqlnd_stream_write */
-size_t mysqlnd_stream_write(MYSQLND * const conn, const zend_uchar * const buf, size_t count TSRMLS_DC)
+static size_t
+mysqlnd_stream_write(MYSQLND * const conn, const zend_uchar * const buf, size_t count TSRMLS_DC)
{
size_t ret;
DBG_ENTER("mysqlnd_stream_write");
- ret = php_stream_write(conn->net.stream, (char *)buf, count);
+ ret = php_stream_write(conn->net->stream, (char *)buf, count);
DBG_RETURN(ret);
}
/* }}} */
{
zend_uchar safe_buf[((MYSQLND_HEADER_SIZE) + (sizeof(zend_uchar)) - 1) / (sizeof(zend_uchar))];
zend_uchar *safe_storage = safe_buf;
- MYSQLND_NET *net = &conn->net;
+ MYSQLND_NET *net = conn->net;
size_t old_chunk_size = net->stream->chunk_size;
size_t ret, left = count, packets_sent = 1;
zend_uchar *p = (zend_uchar *) buf;
int3store(compress_buf, payload_size);
int1store(compress_buf + 3, net->packet_no);
DBG_INF_FMT("writing %d bytes to the network", payload_size + MYSQLND_HEADER_SIZE + COMPRESSED_HEADER_SIZE);
- ret = conn->net.stream_write(conn, compress_buf, payload_size + MYSQLND_HEADER_SIZE + COMPRESSED_HEADER_SIZE TSRMLS_CC);
+ ret = conn->net->stream_write(conn, compress_buf, payload_size + MYSQLND_HEADER_SIZE + COMPRESSED_HEADER_SIZE TSRMLS_CC);
net->compressed_envelope_packet_no++;
} else
#endif /* MYSQLND_COMPRESSION_ENABLED */
STORE_HEADER_SIZE(safe_storage, p);
int3store(p, MYSQLND_MAX_PACKET_SIZE);
int1store(p + 3, net->packet_no);
- ret = conn->net.stream_write(conn, p, MYSQLND_MAX_PACKET_SIZE + MYSQLND_HEADER_SIZE TSRMLS_CC);
+ ret = conn->net->stream_write(conn, p, MYSQLND_MAX_PACKET_SIZE + MYSQLND_HEADER_SIZE TSRMLS_CC);
RESTORE_HEADER_SIZE(p, safe_storage);
net->compressed_envelope_packet_no++;
}
int3store(compress_buf, payload_size);
int1store(compress_buf + 3, net->packet_no);
DBG_INF_FMT("writing %d bytes to the network", payload_size + MYSQLND_HEADER_SIZE + COMPRESSED_HEADER_SIZE);
- ret = conn->net.stream_write(conn, compress_buf, payload_size + MYSQLND_HEADER_SIZE + COMPRESSED_HEADER_SIZE TSRMLS_CC);
+ ret = conn->net->stream_write(conn, compress_buf, payload_size + MYSQLND_HEADER_SIZE + COMPRESSED_HEADER_SIZE TSRMLS_CC);
net->compressed_envelope_packet_no++;
#if WHEN_WE_NEED_TO_CHECK_WHETHER_COMPRESSION_WORKS_CORRECTLY
STORE_HEADER_SIZE(safe_storage, p);
int3store(p, left);
int1store(p + 3, net->packet_no);
- ret = conn->net.stream_write(conn, p, left + MYSQLND_HEADER_SIZE TSRMLS_CC);
+ ret = conn->net->stream_write(conn, p, left + MYSQLND_HEADER_SIZE TSRMLS_CC);
RESTORE_HEADER_SIZE(p, safe_storage);
}
net->packet_no++;
/* {{{ mysqlnd_read_from_stream */
-enum_func_status
+static enum_func_status
mysqlnd_read_from_stream(MYSQLND * conn, zend_uchar * buffer, size_t count TSRMLS_DC)
{
size_t to_read = count, ret;
- size_t old_chunk_size = conn->net.stream->chunk_size;
+ size_t old_chunk_size = conn->net->stream->chunk_size;
DBG_ENTER("mysqlnd_read_from_stream");
DBG_INF_FMT("count=%u", count);
- conn->net.stream->chunk_size = MIN(to_read, conn->options.net_read_buffer_size);
+ conn->net->stream->chunk_size = MIN(to_read, conn->options.net_read_buffer_size);
while (to_read) {
- if (!(ret = php_stream_read(conn->net.stream, (char *) buffer, to_read))) {
+ if (!(ret = php_stream_read(conn->net->stream, (char *) buffer, to_read))) {
DBG_ERR_FMT("Error while reading header from socket");
DBG_RETURN(FAIL);
}
to_read -= ret;
}
MYSQLND_INC_CONN_STATISTIC_W_VALUE(&conn->stats, STAT_BYTES_RECEIVED, count);
- conn->net.stream->chunk_size = old_chunk_size;
+ conn->net->stream->chunk_size = old_chunk_size;
DBG_RETURN(PASS);
}
/* }}} */
static enum_func_status
mysqlnd_read_compressed_packet_from_stream_and_fill_read_buffer(MYSQLND * conn, size_t net_payload_size TSRMLS_DC)
{
- MYSQLND_NET * net = &conn->net;
+ MYSQLND_NET * net = conn->net;
size_t decompressed_size;
enum_func_status ret = PASS;
zend_uchar * compressed_data = NULL;
DBG_ENTER("mysqlnd_read_compressed_packet_from_stream_and_fill_read_buffer");
/* Read the compressed header */
- if (FAIL == conn->net.stream_read(conn, comp_header, COMPRESSED_HEADER_SIZE TSRMLS_CC)) {
+ if (FAIL == conn->net->stream_read(conn, comp_header, COMPRESSED_HEADER_SIZE TSRMLS_CC)) {
DBG_RETURN(FAIL);
}
decompressed_size = uint3korr(comp_header);
int error;
uLongf tmp_complen = decompressed_size;
compressed_data = emalloc(net_payload_size);
- if (FAIL == conn->net.stream_read(conn, compressed_data, net_payload_size TSRMLS_CC)) {
+ if (FAIL == conn->net->stream_read(conn, compressed_data, net_payload_size TSRMLS_CC)) {
ret = FAIL;
goto end;
}
} else {
DBG_INF_FMT("The server decided not to compress the data. Our job is easy. Copying %u bytes", net_payload_size);
net->uncompressed_data = mysqlnd_create_read_buffer(net_payload_size TSRMLS_CC);
- if (FAIL == conn->net.stream_read(conn, net->uncompressed_data->data, net_payload_size TSRMLS_CC)) {
+ if (FAIL == conn->net->stream_read(conn, net->uncompressed_data->data, net_payload_size TSRMLS_CC)) {
ret = FAIL;
goto end;
}
DBG_ENTER("mysqlnd_real_read");
#ifdef MYSQLND_COMPRESSION_ENABLED
- if (conn->net.compressed) {
- MYSQLND_NET * net = &conn->net;
+ if (conn->net->compressed) {
+ MYSQLND_NET * net = conn->net;
if (net->uncompressed_data) {
size_t to_read_from_buffer = MIN(net->uncompressed_data->bytes_left(net->uncompressed_data), to_read);
DBG_INF_FMT("reading %u from uncompressed_data buffer", to_read_from_buffer);
size_t net_payload_size;
zend_uchar packet_no;
- if (FAIL == conn->net.stream_read(conn, net_header, MYSQLND_HEADER_SIZE TSRMLS_CC)) {
+ if (FAIL == conn->net->stream_read(conn, net_header, MYSQLND_HEADER_SIZE TSRMLS_CC)) {
DBG_RETURN(FAIL);
}
net_payload_size = uint3korr(net_header);
DBG_RETURN(PASS);
}
#endif /* MYSQLND_COMPRESSION_ENABLED */
- DBG_RETURN(conn->net.stream_read(conn, p, to_read TSRMLS_CC));
+ DBG_RETURN(conn->net->stream_read(conn, p, to_read TSRMLS_CC));
}
/* }}} */
static enum_func_status
mysqlnd_read_header(MYSQLND * conn, mysqlnd_packet_header * header TSRMLS_DC)
{
- MYSQLND_NET *net = &conn->net;
+ MYSQLND_NET *net = conn->net;
zend_uchar buffer[MYSQLND_HEADER_SIZE];
DBG_ENTER("mysqlnd_read_header_name");
static enum_func_status
mysqlnd_read_body(MYSQLND *conn, mysqlnd_packet_header * header, zend_uchar * store_buf TSRMLS_DC)
{
- MYSQLND_NET *net = &conn->net;
+ MYSQLND_NET *net = conn->net;
DBG_ENTER(mysqlnd_read_body_name);
DBG_INF_FMT("chunk_size=%d compression=%d", net->stream->chunk_size, net->compressed);
php_mysqlnd_ok_read(void *_packet, MYSQLND *conn TSRMLS_DC)
{
zend_uchar local_buf[OK_BUFFER_SIZE];
- size_t buf_len = conn->net.cmd_buffer.buffer? conn->net.cmd_buffer.length : OK_BUFFER_SIZE;
- zend_uchar *buf = conn->net.cmd_buffer.buffer? (zend_uchar *) conn->net.cmd_buffer.buffer : local_buf;
+ size_t buf_len = conn->net->cmd_buffer.buffer? conn->net->cmd_buffer.length : OK_BUFFER_SIZE;
+ zend_uchar *buf = conn->net->cmd_buffer.buffer? (zend_uchar *) conn->net->cmd_buffer.buffer : local_buf;
zend_uchar *p = buf;
zend_uchar *begin = buf;
unsigned long i;
Error : error_code + '#' + sqlstate + MYSQLND_ERRMSG_SIZE
*/
php_mysql_packet_eof *packet= (php_mysql_packet_eof *) _packet;
- size_t buf_len = conn->net.cmd_buffer.length;
- zend_uchar *buf = (zend_uchar *) conn->net.cmd_buffer.buffer;
+ size_t buf_len = conn->net->cmd_buffer.length;
+ zend_uchar *buf = (zend_uchar *) conn->net->cmd_buffer.buffer;
zend_uchar *p = buf;
zend_uchar *begin = buf;
{
/* Let's have some space, which we can use, if not enough, we will allocate new buffer */
php_mysql_packet_command *packet= (php_mysql_packet_command *) _packet;
- MYSQLND_NET *net = &conn->net;
+ MYSQLND_NET *net = conn->net;
unsigned int error_reporting = EG(error_reporting);
size_t written;
static enum_func_status
php_mysqlnd_rset_header_read(void *_packet, MYSQLND *conn TSRMLS_DC)
{
- size_t buf_len = conn->net.cmd_buffer.length;
- zend_uchar *buf = (zend_uchar *) conn->net.cmd_buffer.buffer;
+ size_t buf_len = conn->net->cmd_buffer.length;
+ zend_uchar *buf = (zend_uchar *) conn->net->cmd_buffer.buffer;
zend_uchar *p = buf;
zend_uchar *begin = buf;
size_t len;
{
/* Should be enough for the metadata of a single row */
php_mysql_packet_res_field *packet= (php_mysql_packet_res_field *) _packet;
- size_t buf_len = conn->net.cmd_buffer.length, total_len = 0;
- zend_uchar *buf = (zend_uchar *) conn->net.cmd_buffer.buffer;
+ size_t buf_len = conn->net->cmd_buffer.length, total_len = 0;
+ zend_uchar *buf = (zend_uchar *) conn->net->cmd_buffer.buffer;
zend_uchar *p = buf;
zend_uchar *begin = buf;
char *root_ptr;
static enum_func_status
php_mysqlnd_rowp_read(void *_packet, MYSQLND *conn TSRMLS_DC)
{
- MYSQLND_NET *net = &conn->net;
+ MYSQLND_NET *net = conn->net;
zend_uchar *p;
enum_func_status ret = PASS;
size_t old_chunk_size = net->stream->chunk_size;
php_mysqlnd_stats_read(void *_packet, MYSQLND *conn TSRMLS_DC)
{
php_mysql_packet_stats *packet= (php_mysql_packet_stats *) _packet;
- size_t buf_len = conn->net.cmd_buffer.length;
- zend_uchar *buf = (zend_uchar *) conn->net.cmd_buffer.buffer;
+ size_t buf_len = conn->net->cmd_buffer.length;
+ zend_uchar *buf = (zend_uchar *) conn->net->cmd_buffer.buffer;
DBG_ENTER("php_mysqlnd_stats_read");
php_mysqlnd_prepare_read(void *_packet, MYSQLND *conn TSRMLS_DC)
{
/* In case of an error, we should have place to put it */
- size_t buf_len = conn->net.cmd_buffer.length;
- zend_uchar *buf = (zend_uchar *) conn->net.cmd_buffer.buffer;
+ size_t buf_len = conn->net->cmd_buffer.length;
+ zend_uchar *buf = (zend_uchar *) conn->net->cmd_buffer.buffer;
zend_uchar *p = buf;
zend_uchar *begin = buf;
unsigned int data_size;
php_mysqlnd_chg_user_read(void *_packet, MYSQLND *conn TSRMLS_DC)
{
/* There could be an error message */
- size_t buf_len = conn->net.cmd_buffer.length;
- zend_uchar *buf = (zend_uchar *) conn->net.cmd_buffer.buffer;
+ size_t buf_len = conn->net->cmd_buffer.length;
+ zend_uchar *buf = (zend_uchar *) conn->net->cmd_buffer.buffer;
zend_uchar *p = buf;
zend_uchar *begin = buf;
php_mysql_packet_chg_user_resp *packet= (php_mysql_packet_chg_user_resp *) _packet;
/* }}} */
+/* {{{ mysqlnd_net_init */
+MYSQLND_NET *
+mysqlnd_net_init(zend_bool persistent TSRMLS_DC)
+{
+ MYSQLND_NET * net = mnd_pecalloc(1, sizeof(MYSQLND_NET), persistent);
+
+ DBG_ENTER("mysqlnd_net_init");
+ DBG_INF_FMT("persistent=%d", persistent);
+ net->persistent = persistent;
+
+ net->stream_read = mysqlnd_read_from_stream;
+ net->stream_write = mysqlnd_stream_write;
+
+ {
+ size_t buffer_size = MYSQLND_G(net_cmd_buffer_size) > MYSQLND_NET_CMD_BUFFER_MIN_SIZE?
+ MYSQLND_G(net_cmd_buffer_size):
+ MYSQLND_NET_CMD_BUFFER_MIN_SIZE;
+ net->cmd_buffer.length = buffer_size;
+ net->cmd_buffer.buffer = mnd_pemalloc(buffer_size, persistent);
+ }
+ DBG_RETURN(net);
+}
+/* }}} */
+
+
+/* {{{ mysqlnd_net_init */
+void
+mysqlnd_net_free(MYSQLND_NET * net TSRMLS_DC)
+{
+ DBG_ENTER("mysqlnd_net_free");
+ zend_bool pers = net->persistent;
+ if (net) {
+ if (net->cmd_buffer.buffer) {
+ DBG_INF("Freeing cmd buffer");
+ mnd_pefree(net->cmd_buffer.buffer, pers);
+ net->cmd_buffer.buffer = NULL;
+ }
+
+ if (net->stream) {
+ DBG_INF_FMT("Freeing stream. abstract=%p", net->stream->abstract);
+ if (pers) {
+ php_stream_free(net->stream, PHP_STREAM_FREE_CLOSE_PERSISTENT | PHP_STREAM_FREE_RSRC_DTOR);
+ } else {
+ php_stream_free(net->stream, PHP_STREAM_FREE_CLOSE);
+ }
+ net->stream = NULL;
+ }
+ mnd_pefree(net, pers);
+ }
+ DBG_VOID_RETURN;
+}
+/* }}} */
+
+
/*
* Local variables:
* tab-width: 4