Merge branch 'develop' into MAX-268

This commit is contained in:
MassimilianoPinto
2014-10-14 15:40:30 +02:00
41 changed files with 482 additions and 234 deletions

2
README
View File

@ -29,7 +29,7 @@ issues and communicate with the MaxScale community.
or use the [forum](http://groups.google.com/forum/#!forum/maxscale) interface or use the [forum](http://groups.google.com/forum/#!forum/maxscale) interface
Bugs can be reported in the MariaDB Corporation bugs database Bugs can be reported in the MariaDB Corporation bugs database
[bug.skysql.com](http://bugs.skysql.com) [bug.mariadb.com](http://bugs.mariadb.com)
\section Building Building MaxScale \section Building Building MaxScale

4
debian/changelog vendored
View File

@ -2,9 +2,9 @@ maxscale (1.0-beta) UNRELEASED; urgency=low
* Beta release * Beta release
-- Timofey Turenko <timofey.turenko@skysql.com> Fri, 05 Jul 2014 14:00:00 +0200 -- Timofey Turenko <timofey.turenko@mariadb.com> Fri, 05 Jul 2014 14:00:00 +0200
maxscale (0.7-1) UNRELEASED; urgency=low maxscale (0.7-1) UNRELEASED; urgency=low
* Initial release. (Closes: #XXXXXX) * Initial release. (Closes: #XXXXXX)
-- Timofey Turenko <timofey.turenko@skysql.com> Tue, 11 Mar 2014 22:59:35 +0200 -- Timofey Turenko <timofey.turenko@mariadb.com> Tue, 11 Mar 2014 22:59:35 +0200

View File

@ -270,12 +270,14 @@ static void blockbuf_register(blockbuf_t* bb);
static void blockbuf_unregister(blockbuf_t* bb); static void blockbuf_unregister(blockbuf_t* bb);
static bool logfile_set_enabled(logfile_id_t id, bool val); static bool logfile_set_enabled(logfile_id_t id, bool val);
static char* add_slash(char* str); static char* add_slash(char* str);
static bool file_exists_and_is_writable(char* filename, bool* writable);
static bool check_file_and_path(
char* filename,
bool* nameconflict,
bool* writable);
static bool file_is_symlink(char* filename); static bool file_is_symlink(char* filename);
const char* get_suffix_default(void) const char* get_suffix_default(void)
{ {
return ".log"; return ".log";
@ -357,25 +359,29 @@ static bool logmanager_init_nomutex(
fn->fn_state = UNINIT; fn->fn_state = UNINIT;
fw->fwr_state = UNINIT; fw->fwr_state = UNINIT;
/**
* Set global variable
*/
lm_enabled_logfiles_bitmask = lm->lm_enabled_logfiles;
/** Initialize configuration including log file naming info */ /** Initialize configuration including log file naming info */
if (!fnames_conf_init(fn, argc, argv)) { if (!fnames_conf_init(fn, argc, argv)) {
goto return_succp; goto return_succp;
} }
/** Initialize logfiles */ /** Initialize logfiles */
if(!logfiles_init(lm)) { if(!logfiles_init(lm))
goto return_succp; {
err = 1;
goto return_succp;
} }
/** Initialize filewriter data and open the (first) log file(s) /**
* Set global variable
*/
lm_enabled_logfiles_bitmask = lm->lm_enabled_logfiles;
/** Initialize filewriter data and open the (first) log file(s)
* for each log file type. */ * for each log file type. */
if (!filewriter_init(lm, fw, lm->lm_clientmes, lm->lm_logmes)) { if (!filewriter_init(lm, fw, lm->lm_clientmes, lm->lm_logmes))
goto return_succp; {
err = 1;
goto return_succp;
} }
/** Initialize and start filewriter thread */ /** Initialize and start filewriter thread */
@ -383,8 +389,9 @@ static bool logmanager_init_nomutex(
thr_filewriter_fun, thr_filewriter_fun,
(void *)fw); (void *)fw);
if ((err = skygw_thread_start(fw->fwr_thread)) != 0) { if ((err = skygw_thread_start(fw->fwr_thread)) != 0)
goto return_succp; {
goto return_succp;
} }
/** Wait message from filewriter_thr */ /** Wait message from filewriter_thr */
skygw_message_wait(fw->fwr_clientmes); skygw_message_wait(fw->fwr_clientmes);
@ -393,10 +400,11 @@ static bool logmanager_init_nomutex(
lm->lm_enabled = true; lm->lm_enabled = true;
return_succp: return_succp:
if (err != 0) { if (err != 0)
{
/** This releases memory of all created objects */ /** This releases memory of all created objects */
logmanager_done_nomutex(); logmanager_done_nomutex();
fprintf(stderr, "* Initializing logmanager failed.\n"); fprintf(stderr, "*\n* Error : Initializing log manager failed.\n*\n");
} }
return succp; return succp;
} }
@ -1769,7 +1777,7 @@ static bool logfiles_init(
write_syslog); write_syslog);
if (!succp) { if (!succp) {
fprintf(stderr, "Initializing logfiles failed\n"); fprintf(stderr, "*\n* Error : Initializing log files failed.\n");
break; break;
} }
lid <<= 1; lid <<= 1;
@ -1917,9 +1925,10 @@ static char* add_slash(
return str; return str;
} }
/** /**
* @node Check if the file exists in the local file system and if it does, * @node Check if the path and file exist in the local file system and if they do,
* whether it is writable. * check if they are accessible and writable.
* *
* Parameters: * Parameters:
* @param filename - <usage> * @param filename - <usage>
@ -1928,55 +1937,91 @@ static char* add_slash(
* @param writable - <usage> * @param writable - <usage>
* <description> * <description>
* *
* @return * @return true & writable if file exists and it is writable,
* true & not writable if file exists but it can't be written,
* false & writable if file doesn't exist but directory could be written, and
* false & not writable if directory can't be written.
* *
* * @details Note, that a space character is written to the end of file.
* @details Note, that an space character is written to the end of file.
* TODO: recall what was the reason for not succeeding with simply * TODO: recall what was the reason for not succeeding with simply
* calling access, and fstat. vraa 26.11.13 * calling access, and fstat. vraa 26.11.13
*
*/ */
static bool file_exists_and_is_writable( static bool check_file_and_path(
char* filename, char* filename,
bool* writable) bool* writable)
{ {
int fd; int fd;
bool exists = true; bool exists;
if (filename == NULL) if (filename == NULL)
{ {
exists = false; exists = false;
} *writable = false;
else }
{ else
fd = open(filename, O_CREAT|O_EXCL, S_IRWXU); {
fd = open(filename, O_CREAT|O_EXCL, S_IRWXU);
/** file exist */ if (fd == -1)
if (fd == -1) {
{ /** File exists, check permission to read/write */
/** Open file and write a byte for test */ if (errno == EEXIST)
fd = open(filename, O_CREAT|O_RDWR, S_IRWXU|S_IRWXG); {
/** Open file and write a byte for test */
fd = open(filename, O_CREAT|O_RDWR, S_IRWXU|S_IRWXG);
if (fd != -1) if (fd == -1)
{ {
char c = ' '; fprintf(stderr,
if (write(fd, &c, 1) == 1) "*\n* Error : Can't access %s due "
{ "to %s.\n",
*writable = true; filename,
} strerror(errno));
close(fd); *writable = false;
} }
} else
else {
{ char c = ' ';
close(fd); if (write(fd, &c, 1) == 1)
unlink(filename); {
exists = false; *writable = true;
} }
} else
return exists; {
fprintf(stderr,
"*\n* Error : Can't write to "
"%s due to %s.\n",
filename,
strerror(errno));
*writable = false;
}
close(fd);
}
exists = true;
}
else
{
fprintf(stderr,
"*\n* Error : Can't access %s due to %s.\n",
filename,
strerror(errno));
exists = false;
*writable = false;
}
}
else
{
close(fd);
unlink(filename);
exists = false;
*writable = true;
}
}
return exists;
} }
static bool file_is_symlink( static bool file_is_symlink(
char* filename) char* filename)
{ {
@ -2112,7 +2157,8 @@ static bool logfile_init(
logfile->lf_full_file_name = logfile->lf_full_file_name =
form_full_file_name(strparts, logfile->lf_name_seqno, 2); form_full_file_name(strparts, logfile->lf_name_seqno, 2);
if (store_shmem) { if (store_shmem)
{
strparts[0].sp_string = logfile->lf_linkpath; strparts[0].sp_string = logfile->lf_linkpath;
/** /**
* Create name for link file * Create name for link file
@ -2121,17 +2167,7 @@ static bool logfile_init(
form_full_file_name(strparts, form_full_file_name(strparts,
logfile->lf_name_seqno, logfile->lf_name_seqno,
2); 2);
fprintf(stderr, "%s\t: %s->%s\n",
STRLOGNAME(logfile_id),
logfile->lf_full_link_name,
logfile->lf_full_file_name);
} }
else
{
fprintf(stderr, "%s\t: %s\n",
STRLOGNAME(logfile_id),
logfile->lf_full_file_name);
}
/** /**
* At least one of the files couldn't be created. Increase * At least one of the files couldn't be created. Increase
* sequence number and retry until succeeds. * sequence number and retry until succeeds.
@ -2147,32 +2183,57 @@ static bool logfile_init(
* If file exists but is different type, create fails and * If file exists but is different type, create fails and
* new, increased sequence number is added to file name. * new, increased sequence number is added to file name.
*/ */
if (file_exists_and_is_writable(logfile->lf_full_file_name, if (check_file_and_path(
&writable)) logfile->lf_full_file_name,
{ &writable))
if (!writable || {
file_is_symlink(logfile->lf_full_file_name)) /** Found similarly named file which isn't writable */
{ if (!writable ||
nameconflicts = true; file_is_symlink(logfile->lf_full_file_name))
goto file_create_fail; {
} nameconflicts = true;
} goto file_create_fail;
}
}
else
{
/**
* Opening the file failed for some other reason than
* existing non-writable file. Shut down.
*/
if (!writable)
{
succp = false;
goto return_with_succp;
}
}
if (store_shmem) if (store_shmem)
{ {
writable = false; if (check_file_and_path(
logfile->lf_full_file_name,
if (file_exists_and_is_writable( &writable))
logfile->lf_full_link_name, {
&writable)) /** Found similarly named file which isn't writable */
{ if (!writable ||
if (!writable || file_is_symlink(logfile->lf_full_file_name))
!file_is_symlink(logfile->lf_full_link_name)) {
{ nameconflicts = true;
nameconflicts = true; goto file_create_fail;
goto file_create_fail; }
} }
} else
{
/**
* Opening the file failed for some other reason than
* existing non-writable file. Shut down.
*/
if (!writable)
{
succp = false;
goto return_with_succp;
}
}
} }
file_create_fail: file_create_fail:
if (namecreatefail || nameconflicts) if (namecreatefail || nameconflicts)
@ -2189,7 +2250,6 @@ file_create_fail:
free(logfile->lf_full_link_name); free(logfile->lf_full_link_name);
logfile->lf_full_link_name = NULL; logfile->lf_full_link_name = NULL;
} }
goto return_with_succp;
} }
} while (namecreatefail || nameconflicts); } while (namecreatefail || nameconflicts);
/** /**
@ -2203,11 +2263,24 @@ file_create_fail:
MAXNBLOCKBUFS) == NULL) MAXNBLOCKBUFS) == NULL)
{ {
ss_dfprintf(stderr, ss_dfprintf(stderr,
"Initializing logfile blockbuf list " "*\n* Error : Initializing buffers for log files "
"failed\n"); "failed.");
logfile_free_memory(logfile); logfile_free_memory(logfile);
goto return_with_succp; goto return_with_succp;
} }
if (store_shmem)
{
fprintf(stderr, "%s\t: %s->%s\n",
STRLOGNAME(logfile_id),
logfile->lf_full_link_name,
logfile->lf_full_file_name);
}
else
{
fprintf(stderr, "%s\t: %s\n",
STRLOGNAME(logfile_id),
logfile->lf_full_file_name);
}
succp = true; succp = true;
logfile->lf_state = RUN; logfile->lf_state = RUN;
CHK_LOGFILE(logfile); CHK_LOGFILE(logfile);
@ -2245,12 +2318,18 @@ static void logfile_done(
{ {
switch(lf->lf_state) { switch(lf->lf_state) {
case RUN: case RUN:
CHK_LOGFILE(lf); CHK_LOGFILE(lf);
ss_dassert(lf->lf_npending_writes == 0); ss_dassert(lf->lf_npending_writes == 0);
/** fallthrough */
case INIT: case INIT:
mlist_done(&lf->lf_blockbuf_list); /** Test if list is initialized before freeing it */
logfile_free_memory(lf); if (lf->lf_blockbuf_list.mlist_versno != 0)
lf->lf_state = DONE; {
mlist_done(&lf->lf_blockbuf_list);
}
logfile_free_memory(lf);
lf->lf_state = DONE;
/** fallthrough */
case DONE: case DONE:
case UNINIT: case UNINIT:
default: default:

View File

@ -1,9 +1,15 @@
function(debugmsg MSG)
if(DEBUG_OUTPUT)
message(STATUS "DEBUG: ${MSG}")
endif()
endfunction()
macro(set_maxscale_version) macro(set_maxscale_version)
#MaxScale version number #MaxScale version number
set(MAXSCALE_VERSION_MAJOR "1") set(MAXSCALE_VERSION_MAJOR "1")
set(MAXSCALE_VERSION_MINOR "0") set(MAXSCALE_VERSION_MINOR "0")
set(MAXSCALE_VERSION_PATCH "1") set(MAXSCALE_VERSION_PATCH "2")
set(MAXSCALE_VERSION_NUMERIC "${MAXSCALE_VERSION_MAJOR}.${MAXSCALE_VERSION_MINOR}.${MAXSCALE_VERSION_PATCH}") set(MAXSCALE_VERSION_NUMERIC "${MAXSCALE_VERSION_MAJOR}.${MAXSCALE_VERSION_MINOR}.${MAXSCALE_VERSION_PATCH}")
set(MAXSCALE_VERSION "${MAXSCALE_VERSION_MAJOR}.${MAXSCALE_VERSION_MINOR}.${MAXSCALE_VERSION_PATCH}-beta") set(MAXSCALE_VERSION "${MAXSCALE_VERSION_MAJOR}.${MAXSCALE_VERSION_MINOR}.${MAXSCALE_VERSION_PATCH}-beta")
@ -85,17 +91,13 @@ macro(check_dirs)
# Find the MySQL headers if they were not defined # Find the MySQL headers if they were not defined
if(DEFINED MYSQL_DIR) if(DEFINED MYSQL_DIR)
if(DEBUG_OUTPUT) debugmsg("Searching for MySQL headers at: ${MYSQL_DIR}")
message(STATUS "Searching for MySQL headers at: ${MYSQL_DIR}")
endif()
find_path(MYSQL_DIR_LOC mysql.h PATHS ${MYSQL_DIR} PATH_SUFFIXES mysql mariadb NO_DEFAULT_PATH) find_path(MYSQL_DIR_LOC mysql.h PATHS ${MYSQL_DIR} PATH_SUFFIXES mysql mariadb NO_DEFAULT_PATH)
else() else()
find_path(MYSQL_DIR_LOC mysql.h PATH_SUFFIXES mysql mariadb) find_path(MYSQL_DIR_LOC mysql.h PATH_SUFFIXES mysql mariadb)
endif() endif()
if(DEBUG_OUTPUT) debugmsg("Search returned: ${MYSQL_DIR_LOC}")
message(STATUS "Search returned: ${MYSQL_DIR_LOC}")
endif()
if(${MYSQL_DIR_LOC} MATCHES "NOTFOUND") if(${MYSQL_DIR_LOC} MATCHES "NOTFOUND")
set(DEPS_OK FALSE CACHE BOOL "If all the dependencies were found.") set(DEPS_OK FALSE CACHE BOOL "If all the dependencies were found.")
@ -109,6 +111,7 @@ macro(check_dirs)
# Find the errmsg.sys file if it was not defied # Find the errmsg.sys file if it was not defied
if( DEFINED ERRMSG ) if( DEFINED ERRMSG )
debugmsg("Looking for errmsg.sys at: ${ERRMSG}")
find_file(ERRMSG_FILE errmsg.sys PATHS ${ERRMSG} NO_DEFAULT_PATH) find_file(ERRMSG_FILE errmsg.sys PATHS ${ERRMSG} NO_DEFAULT_PATH)
endif() endif()
find_file(ERRMSG_FILE errmsg.sys PATHS /usr/share/mysql /usr/local/share/mysql PATH_SUFFIXES english) find_file(ERRMSG_FILE errmsg.sys PATHS /usr/share/mysql /usr/local/share/mysql PATH_SUFFIXES english)
@ -122,42 +125,52 @@ macro(check_dirs)
unset(ERRMSG_FILE) unset(ERRMSG_FILE)
# Find the embedded mysql library # Find the embedded mysql library
if (DEFINED EMBEDDED_LIB)
debugmsg("Searching for the embedded library at: ${EMBEDDED_LIB}")
if(${CMAKE_VERSION} VERSION_LESS 2.12 )
set(COMP_VAR PATH)
else()
set(COMP_VAR DIRECTORY)
endif()
get_filename_component(EMBEDDED_LIB ${EMBEDDED_LIB} ${COMP_VAR})
endif()
if(STATIC_EMBEDDED) if(STATIC_EMBEDDED)
debugmsg("Using the static embedded library...")
set(OLD_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) set(OLD_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
if (DEFINED EMBEDDED_LIB) if (DEFINED EMBEDDED_LIB)
if(DEBUG_OUTPUT) debugmsg("Searching for libmysqld.a at: ${EMBEDDED_LIB}")
message(STATUS "Searching for libmysqld.a at: ${EMBEDDED_LIB}")
endif()
find_library(EMBEDDED_LIB_STATIC libmysqld.a PATHS ${EMBEDDED_LIB} PATH_SUFFIXES mysql mariadb NO_DEFAULT_PATH) find_library(EMBEDDED_LIB_STATIC libmysqld.a PATHS ${EMBEDDED_LIB} PATH_SUFFIXES mysql mariadb NO_DEFAULT_PATH)
else() else()
find_library(EMBEDDED_LIB_STATIC libmysqld.a PATH_SUFFIXES mysql mariadb) find_library(EMBEDDED_LIB_STATIC libmysqld.a PATH_SUFFIXES mysql mariadb)
endif() endif()
if(DEBUG_OUTPUT) debugmsg("Search returned: ${EMBEDDED_LIB_STATIC}")
message(STATUS "Search returned: ${EMBEDDED_LIB_STATIC}")
endif()
set(EMBEDDED_LIB ${EMBEDDED_LIB_STATIC} CACHE FILEPATH "Path to libmysqld" FORCE) set(EMBEDDED_LIB ${EMBEDDED_LIB_STATIC} CACHE FILEPATH "Path to libmysqld" FORCE)
set(CMAKE_FIND_LIBRARY_SUFFIXES ${OLD_SUFFIXES}) set(CMAKE_FIND_LIBRARY_SUFFIXES ${OLD_SUFFIXES})
unset(OLD_SUFFIXES)
else() else()
debugmsg("Using the dynamic embedded library...")
set(OLD_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
set(CMAKE_FIND_LIBRARY_SUFFIXES ".so")
if (DEFINED EMBEDDED_LIB) if (DEFINED EMBEDDED_LIB)
if(DEBUG_OUTPUT) debugmsg("Searching for libmysqld.so at: ${EMBEDDED_LIB}")
message(STATUS "Searching for libmysqld.so at: ${EMBEDDED_LIB}")
endif()
find_library(EMBEDDED_LIB_DYNAMIC mysqld PATHS ${EMBEDDED_LIB} PATH_SUFFIXES mysql mariadb NO_DEFAULT_PATH) find_library(EMBEDDED_LIB_DYNAMIC mysqld PATHS ${EMBEDDED_LIB} PATH_SUFFIXES mysql mariadb NO_DEFAULT_PATH)
else() else()
find_library(EMBEDDED_LIB_DYNAMIC mysqld PATH_SUFFIXES mysql mariadb) find_library(EMBEDDED_LIB_DYNAMIC mysqld PATH_SUFFIXES mysql mariadb)
endif() endif()
if(DEBUG_OUTPUT) debugmsg("Search returned: ${EMBEDDED_LIB_DYNAMIC}")
message(STATUS "Search returned: ${EMBEDDED_LIB_DYNAMIC}")
endif()
set(EMBEDDED_LIB ${EMBEDDED_LIB_DYNAMIC} CACHE FILEPATH "Path to libmysqld" FORCE) set(EMBEDDED_LIB ${EMBEDDED_LIB_DYNAMIC} CACHE FILEPATH "Path to libmysqld" FORCE)
set(CMAKE_FIND_LIBRARY_SUFFIXES ${OLD_SUFFIXES})
endif() endif()
unset(EMBEDDED_LIB_DYNAMIC) unset(EMBEDDED_LIB_DYNAMIC)
unset(EMBEDDED_LIB_STATIC) unset(EMBEDDED_LIB_STATIC)
unset(OLD_SUFFIXES)
# Inform the user about the embedded library # Inform the user about the embedded library
if( (${EMBEDDED_LIB} MATCHES "NOTFOUND") OR (${EMBEDDED_LIB} MATCHES "NOTFOUND")) if( (${EMBEDDED_LIB} MATCHES "NOTFOUND") OR (${EMBEDDED_LIB} MATCHES "NOTFOUND"))

View File

@ -26,7 +26,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
MariaDB Corporation change details: MariaDB Corporation change details:
- Removed unnecessary file driver - Removed unnecessary file driver
Author: Jan Lindström (jan.lindstrom@skysql.com Author: Jan Lindström (jan.lindstrom@mariadb.com
*/ */
#include "access_method_factory.h" #include "access_method_factory.h"

View File

@ -26,7 +26,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
MariaDB Corporation change details: MariaDB Corporation change details:
- Added GTID event handler - Added GTID event handler
Author: Jan Lindström (jan.lindstrom@skysql.com Author: Jan Lindström (jan.lindstrom@mariadb.com
*/ */

View File

@ -26,7 +26,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
MariaDB Corporation change details: MariaDB Corporation change details:
- Added GTID event handler - Added GTID event handler
Author: Jan Lindström (jan.lindstrom@skysql.com Author: Jan Lindström (jan.lindstrom@mariadb.com
*/ */

View File

@ -27,7 +27,7 @@ MariaDB Corporation change details:
- Added support for setting binlog position based on GTID - Added support for setting binlog position based on GTID
- Added support for MySQL and MariDB server types - Added support for MySQL and MariDB server types
Author: Jan Lindström (jan.lindstrom@skysql.com Author: Jan Lindström (jan.lindstrom@mariadb.com
*/ */

View File

@ -27,7 +27,7 @@ MariaDB Corporation change details:
- Added support for setting binlog position based on GTID - Added support for setting binlog position based on GTID
- Added support for MySQL and MariDB server types - Added support for MySQL and MariDB server types
Author: Jan Lindström (jan.lindstrom@skysql.com Author: Jan Lindström (jan.lindstrom@mariadb.com
*/ */

View File

@ -26,7 +26,7 @@
MariaDB Corporation change details: MariaDB Corporation change details:
- Added support for GTID event handling for both MySQL and MariaDB - Added support for GTID event handling for both MySQL and MariaDB
Author: Jan Lindström (jan.lindstrom@skysql.com Author: Jan Lindström (jan.lindstrom@mariadb.com
*/ */

View File

@ -27,7 +27,7 @@ MariaDB Corporation change details:
- Added support for GTID event handling for both MySQL and MariaDB - Added support for GTID event handling for both MySQL and MariaDB
- Added support for setting binlog position based on GTID - Added support for setting binlog position based on GTID
Author: Jan Lindström (jan.lindstrom@skysql.com Author: Jan Lindström (jan.lindstrom@mariadb.com
*/ */

View File

@ -26,7 +26,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
MariaDB Corporation change details: MariaDB Corporation change details:
- Added support for GTID event handling for both MySQL and MariaDB - Added support for GTID event handling for both MySQL and MariaDB
Author: Jan Lindström (jan.lindstrom@skysql.com Author: Jan Lindström (jan.lindstrom@mariadb.com
*/ */

View File

@ -26,7 +26,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
MariaDB Corporation change details: MariaDB Corporation change details:
- Added support for GTID event handling for both MySQL and MariaDB - Added support for GTID event handling for both MySQL and MariaDB
Author: Jan Lindström (jan.lindstrom@skysql.com Author: Jan Lindström (jan.lindstrom@mariadb.com
*/ */
#ifndef _BINLOG_EVENT_H #ifndef _BINLOG_EVENT_H

View File

@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 51 this program; if not, write to the Free Software Foundation, Inc., 51
Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Author: Jan Lindström jan.lindstrom@skysql.com Author: Jan Lindström jan.lindstrom@mariadb.com
*/ */

View File

@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 51 this program; if not, write to the Free Software Foundation, Inc., 51
Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Author: Jan Lindström jan.lindstrom@skysql.com Author: Jan Lindström jan.lindstrom@mariadb.com
*/ */

View File

@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 51 this program; if not, write to the Free Software Foundation, Inc., 51
Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Author: Jan Lindström jan.lindstrom@skysql.com Author: Jan Lindström jan.lindstrom@mariadb.com
*/ */

View File

@ -26,7 +26,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
MariaDB Corporation change details: MariaDB Corporation change details:
- Added support for GTID event handling for both MySQL and MariaDB - Added support for GTID event handling for both MySQL and MariaDB
Author: Jan Lindström (jan.lindstrom@skysql.com Author: Jan Lindström (jan.lindstrom@mariadb.com
*/ */
#include <stdint.h> #include <stdint.h>

View File

@ -28,7 +28,7 @@ MariaDB Corporation change details:
- Added support for starting binlog dump from GTID position - Added support for starting binlog dump from GTID position
- Added error handling using exceptions - Added error handling using exceptions
Author: Jan Lindström (jan.lindstrom@skysql.com Author: Jan Lindström (jan.lindstrom@mariadb.com
*/ */
#include "binlog_api.h" #include "binlog_api.h"

View File

@ -28,7 +28,7 @@ MariaDB Corporation change details:
- Added support for starting binlog dump from GTID position - Added support for starting binlog dump from GTID position
- Added support for MariaDB server - Added support for MariaDB server
Author: Jan Lindström (jan.lindstrom@skysql.com Author: Jan Lindström (jan.lindstrom@mariadb.com
*/ */

View File

@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 51 this program; if not, write to the Free Software Foundation, Inc., 51
Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Author: Jan Lindström jan.lindstrom@skysql.com Author: Jan Lindström jan.lindstrom@mariadb.com
*/ */

View File

@ -73,7 +73,9 @@
#include <execinfo.h> #include <execinfo.h>
/** for procname */ /** for procname */
#define _GNU_SOURCE #if !defined(_GNU_SOURCE)
# define _GNU_SOURCE
#endif
extern char *program_invocation_name; extern char *program_invocation_name;
extern char *program_invocation_short_name; extern char *program_invocation_short_name;
@ -174,6 +176,9 @@ static bool resolve_maxscale_conf_fname(
char* cnf_file_arg); char* cnf_file_arg);
static bool resolve_maxscale_homedir( static bool resolve_maxscale_homedir(
char** p_home_dir); char** p_home_dir);
static char* check_dir_access(char* dirname);
/** /**
* Handler for SIGHUP signal. Reload the configuration for the * Handler for SIGHUP signal. Reload the configuration for the
* gateway. * gateway.
@ -593,65 +598,45 @@ static bool resolve_maxscale_homedir(
if (*p_home_dir != NULL) if (*p_home_dir != NULL)
{ {
log_context = strdup("Current working directory"); log_context = strdup("Current working directory");
goto check_home_dir;
} }
check_home_dir: check_home_dir:
if (*p_home_dir != NULL)
{
if (!file_is_readable(*p_home_dir))
{
char* tailstr = "MaxScale doesn't have read permission "
"to MAXSCALE_HOME.";
char* logstr = (char*)malloc(strlen(log_context)+
1+
strlen(tailstr)+
1);
snprintf(logstr,
strlen(log_context)+
1+
strlen(tailstr)+1,
"%s:%s",
log_context,
tailstr);
print_log_n_stderr(true, true, logstr, logstr, 0);
free(logstr);
goto return_succp;
}
if (!file_is_writable(*p_home_dir)) if (*p_home_dir != NULL)
{ {
char* tailstr = "MaxScale doesn't have write permission " char* errstr;
"to MAXSCALE_HOME. Exiting.";
char* logstr = (char*)malloc(strlen(log_context)+
1+
strlen(tailstr)+
1);
snprintf(logstr,
strlen(log_context)+
1+
strlen(tailstr)+1,
"%s:%s",
log_context,
tailstr);
print_log_n_stderr(true, true, logstr, logstr, 0);
free(logstr);
goto return_succp;
}
if (!daemon_mode) errstr = check_dir_access(*p_home_dir);
{
fprintf(stderr,
"Using %s as MAXSCALE_HOME = %s\n",
log_context,
tmp);
}
succp = true;
goto return_succp;
}
return_succp: if (errstr != NULL)
free (tmp); {
char* logstr = (char*)malloc(strlen(log_context)+
1+
strlen(errstr)+
1);
snprintf(logstr,
strlen(log_context)+
1+
strlen(errstr)+1,
"%s: %s",
log_context,
errstr);
print_log_n_stderr(true, true, logstr, logstr, 0);
free(errstr);
free(logstr);
}
else if (!daemon_mode)
{
fprintf(stderr,
"Using %s as MAXSCALE_HOME = %s\n",
log_context,
tmp);
}
}
free (tmp);
if (log_context != NULL) if (log_context != NULL)
{ {
@ -668,6 +653,42 @@ return_succp:
return succp; return succp;
} }
/**
* Check read and write accessibility to a directory.
* @param dirname directory to be checked
*
* @return NULL if directory can be read and written, an error message if either
* read or write is not permitted.
*/
static char* check_dir_access(
char* dirname)
{
char* errstr = NULL;
if (dirname == NULL)
{
errstr = strdup("Directory argument is NULL");
goto retblock;
}
if (!file_is_readable(dirname))
{
errstr = strdup("MaxScale doesn't have read permission "
"to MAXSCALE_HOME.");
goto retblock;
}
if (!file_is_writable(dirname))
{
errstr = strdup("MaxScale doesn't have write permission "
"to MAXSCALE_HOME. Exiting.");
goto retblock;
}
retblock:
return errstr;
}
/** /**
* @node Provides error printing for non-formatted error strings. * @node Provides error printing for non-formatted error strings.
@ -1378,6 +1399,44 @@ int main(int argc, char **argv)
sprintf(mysql_home, "%s/mysql", home_dir); sprintf(mysql_home, "%s/mysql", home_dir);
setenv("MYSQL_HOME", mysql_home, 1); setenv("MYSQL_HOME", mysql_home, 1);
} }
else
{
char* log_context = strdup("Home directory command-line argument");
char* errstr;
errstr = check_dir_access(home_dir);
if (errstr != NULL)
{
char* logstr = (char*)malloc(strlen(log_context)+
1+
strlen(errstr)+
1);
snprintf(logstr,
strlen(log_context)+
1+
strlen(errstr)+1,
"%s: %s",
log_context,
errstr);
print_log_n_stderr(true, true, logstr, logstr, 0);
free(errstr);
free(logstr);
rc = MAXSCALE_HOMELESS;
goto return_main;
}
else if (!daemon_mode)
{
fprintf(stderr,
"Using %s as MAXSCALE_HOME = %s\n",
log_context,
home_dir);
}
free(log_context);
}
/*< /*<
* Init Log Manager for MaxScale. * Init Log Manager for MaxScale.
@ -1387,8 +1446,9 @@ int main(int argc, char **argv)
* argv[0] * argv[0]
*/ */
{ {
char buf[1024]; char buf[1024];
char *argv[8]; char *argv[8];
bool succp;
sprintf(buf, "%s/log", home_dir); sprintf(buf, "%s/log", home_dir);
mkdir(buf, 0777); mkdir(buf, 0777);
@ -1401,7 +1461,7 @@ int main(int argc, char **argv)
argv[4] = "LOGFILE_MESSAGE,LOGFILE_ERROR" argv[4] = "LOGFILE_MESSAGE,LOGFILE_ERROR"
"LOGFILE_DEBUG,LOGFILE_TRACE"; "LOGFILE_DEBUG,LOGFILE_TRACE";
argv[5] = NULL; argv[5] = NULL;
skygw_logmanager_init(5, argv); succp = skygw_logmanager_init(5, argv);
} }
else else
{ {
@ -1410,7 +1470,13 @@ int main(int argc, char **argv)
argv[5] = "-l"; /*< write to syslog */ argv[5] = "-l"; /*< write to syslog */
argv[6] = "LOGFILE_MESSAGE,LOGFILE_ERROR"; /*< ..these logs to syslog */ argv[6] = "LOGFILE_MESSAGE,LOGFILE_ERROR"; /*< ..these logs to syslog */
argv[7] = NULL; argv[7] = NULL;
skygw_logmanager_init(7, argv); succp = skygw_logmanager_init(7, argv);
}
if (!succp)
{
rc = MAXSCALE_BADCONFIG;
goto return_main;
} }
} }

View File

@ -13,7 +13,7 @@
* this program; if not, write to the Free Software Foundation, Inc., 51 * this program; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* *
* Copyright SkySQL Ab 2014 * Copyright MariaDB Corporation Ab 2014
*/ */
/** /**
@ -32,6 +32,7 @@
#include <string.h> #include <string.h>
#include <buffer.h> #include <buffer.h>
#include <hint.h>
/** /**
* test1 Allocate a buffer and do lots of things * test1 Allocate a buffer and do lots of things
@ -41,6 +42,7 @@ static int
test1() test1()
{ {
GWBUF *buffer, *extra, *clone, *partclone, *transform; GWBUF *buffer, *extra, *clone, *partclone, *transform;
HINT *hint;
int size = 100; int size = 100;
int bite1 = 35; int bite1 = 35;
int bite2 = 60; int bite2 = 60;
@ -58,6 +60,10 @@ int buflen;
ss_info_dassert(size == buflen, "Incorrect buffer size"); ss_info_dassert(size == buflen, "Incorrect buffer size");
ss_info_dassert(0 == GWBUF_EMPTY(buffer), "Buffer should not be empty"); ss_info_dassert(0 == GWBUF_EMPTY(buffer), "Buffer should not be empty");
ss_info_dassert(GWBUF_IS_TYPE_UNDEFINED(buffer), "Buffer type should be undefined"); ss_info_dassert(GWBUF_IS_TYPE_UNDEFINED(buffer), "Buffer type should be undefined");
ss_dfprintf(stderr, "\t..done\nSet a hint for the buffer");
hint = hint_create_parameter(NULL, strdup("name"), "value");
gwbuf_add_hint(buffer, hint);
ss_info_dassert(hint == buffer->hint, "Buffer should point to first and only hint");
ss_dfprintf(stderr, "\t..done\nSet a property for the buffer"); ss_dfprintf(stderr, "\t..done\nSet a property for the buffer");
gwbuf_add_property(buffer, "name", "value"); gwbuf_add_property(buffer, "name", "value");
ss_info_dassert(0 == strcmp("value", gwbuf_get_property(buffer, "name")), "Should now have correct property"); ss_info_dassert(0 == strcmp("value", gwbuf_get_property(buffer, "name")), "Should now have correct property");

View File

@ -13,7 +13,7 @@
* this program; if not, write to the Free Software Foundation, Inc., 51 * this program; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* *
* Copyright SkySQL Ab 2014 * Copyright MariaDB Corporation Ab 2014
*/ */
/** /**
@ -51,6 +51,7 @@ int buflen;
ss_dfprintf(stderr, ss_dfprintf(stderr,
"testdcb : creating buffer with type DCB_ROLE_SERVICE_LISTENER"); "testdcb : creating buffer with type DCB_ROLE_SERVICE_LISTENER");
dcb = dcb_alloc(DCB_ROLE_SERVICE_LISTENER); dcb = dcb_alloc(DCB_ROLE_SERVICE_LISTENER);
printDCB(dcb);
ss_info_dassert(dcb_isvalid(dcb), "New DCB must be valid"); ss_info_dassert(dcb_isvalid(dcb), "New DCB must be valid");
ss_dfprintf(stderr, "\t..done\nAllocated dcb."); ss_dfprintf(stderr, "\t..done\nAllocated dcb.");
clone = dcb_clone(dcb); clone = dcb_clone(dcb);

View File

@ -0,0 +1,83 @@
/*
* This file is distributed as part of MaxScale. It is free
* software: you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation,
* version 2.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Copyright MariaDB Corporation Ab 2014
*/
/**
*
* @verbatim
* Revision History
*
* Date Who Description
* 13-10-2014 Martin Brampton Initial implementation
*
* @endverbatim
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <gwbitmask.h>
#include <skygw_debug.h>
/**
* test1 Allocate table of users and mess around with it
*
*/
static int
test1()
{
static GWBITMASK bitmask, another;
int i;
/* Hint tests */
ss_dfprintf(stderr,
"testgwbitmask : Initialise a bitmask");
bitmask_init(&bitmask);
ss_info_dassert(BIT_LENGTH_INITIAL == bitmask.length, "Length should be initial length.");
for (i = 0; i < BIT_LENGTH_INITIAL; i++) {
ss_info_dassert(0 == bitmask_isset(&bitmask, i), "All bits should initially be zero");
}
ss_info_dassert(0 != bitmask_isallclear(&bitmask), "Should be all clear");
ss_dfprintf(stderr, "\t..done\nSet an arbitrary bit.");
bitmask_set(&bitmask, 17);
bitmask_copy(&another, &bitmask);
ss_info_dassert(0 != bitmask_isset(&another, 17), "Test bit should be set");
ss_dfprintf(stderr, "\t..done\nClear the arbitrary bit.");
bitmask_clear(&bitmask, 17);
ss_info_dassert(0 == bitmask_isset(&bitmask, 17), "Test bit should be clear");
ss_info_dassert(0 != bitmask_isallclear(&bitmask), "Should be all clear");
ss_dfprintf(stderr, "\t..done\nFree the bitmask.");
bitmask_free(&bitmask);
ss_info_dassert(0 == bitmask.length, "Length should be zero after bit mask freed.");
ss_dfprintf(stderr, "\t..done\n");
return 0;
}
int main(int argc, char **argv)
{
int result = 0;
result += test1();
exit(result);
}

View File

@ -13,7 +13,7 @@
* this program; if not, write to the Free Software Foundation, Inc., 51 * this program; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* *
* Copyright SkySQL Ab 2014 * Copyright MariaDB Corporation Ab 2014
*/ */
/** /**

View File

@ -13,7 +13,7 @@
* this program; if not, write to the Free Software Foundation, Inc., 51 * this program; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* *
* Copyright SkySQL Ab 2014 * Copyright MariaDB Corporation Ab 2014
*/ */
/** /**

View File

@ -13,7 +13,7 @@
* this program; if not, write to the Free Software Foundation, Inc., 51 * this program; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* *
* Copyright SkySQL Ab 2014 * Copyright MariaDB Corporation Ab 2014
*/ */
/** /**

View File

@ -13,7 +13,7 @@
* this program; if not, write to the Free Software Foundation, Inc., 51 * this program; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* *
* Copyright SkySQL Ab 2014 * Copyright MariaDB Corporation Ab 2014
*/ */
/** /**

View File

@ -13,7 +13,7 @@
* this program; if not, write to the Free Software Foundation, Inc., 51 * this program; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* *
* Copyright SkySQL Ab 2014 * Copyright MariaDB Corporation Ab 2014
*/ */
/** /**

View File

@ -13,7 +13,7 @@
* this program; if not, write to the Free Software Foundation, Inc., 51 * this program; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* *
* Copyright SkySQL Ab 2014 * Copyright MariaDB Corporation Ab 2014
*/ */
/** /**

4
server/modules/filter/test/Makefile Executable file → Normal file
View File

@ -1,4 +1,4 @@
# This file is distributed as part of MaxScale form SkySQL. It is free # This file is distributed as part of MaxScale form MariaDB Corporation. It is free
# software: you can redistribute it and/or modify it under the terms of the # software: you can redistribute it and/or modify it under the terms of the
# GNU General Public License as published by the Free Software Foundation, # GNU General Public License as published by the Free Software Foundation,
# version 2. # version 2.
@ -12,7 +12,7 @@
# this program; if not, write to the Free Software Foundation, Inc., 51 # this program; if not, write to the Free Software Foundation, Inc., 51
# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
# #
# Copyright SkySQL Ab 2014 # Copyright MariaDB Corporation Ab 2014
include ../../../../build_gateway.inc include ../../../../build_gateway.inc

View File

@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 51 this program; if not, write to the Free Software Foundation, Inc., 51
Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Author: Jan Lindström jan.lindstrom@skysql.com Author: Jan Lindström jan.lindstrom@mariadb.com
Created: 20-06-2013 Created: 20-06-2013
Updated: Updated:

View File

@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 51 this program; if not, write to the Free Software Foundation, Inc., 51
Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Author: Jan Lindström jan.lindstrom@skysql.com Author: Jan Lindström jan.lindstrom@mariadb.com
Created: 20-06-2013 Created: 20-06-2013
Updated: Updated:

View File

@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 51 this program; if not, write to the Free Software Foundation, Inc., 51
Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Author: Jan Lindström jan.lindstrom@skysql.com Author: Jan Lindström jan.lindstrom@mariadb.com
Created: 20-06-2013 Created: 20-06-2013
Updated: Updated:
*/ */

View File

@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 51 this program; if not, write to the Free Software Foundation, Inc., 51
Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Author: Jan Lindström jan.lindstrom@skysql.com Author: Jan Lindström jan.lindstrom@mariadb.com
Created: 20-06-2013 Created: 20-06-2013
Updated: Updated:

View File

@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 51 this program; if not, write to the Free Software Foundation, Inc., 51
Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Author: Jan Lindström jan.lindstrom@skysql.com Author: Jan Lindström jan.lindstrom@mariadb.com
Created: 15-07-2013 Created: 15-07-2013
Updated: Updated:
*/ */

View File

@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 51 this program; if not, write to the Free Software Foundation, Inc., 51
Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Author: Jan Lindström jan.lindstrom@skysql.com Author: Jan Lindström jan.lindstrom@mariadb.com
Created: 15-07-2013 Created: 15-07-2013
Updated: Updated:
*/ */

View File

@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 51 this program; if not, write to the Free Software Foundation, Inc., 51
Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Author: Jan Lindström jan.lindstrom@skysql.com Author: Jan Lindström jan.lindstrom@mariadb.com
Created: 20-06-2013 Created: 20-06-2013
Updated: Updated:

View File

@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 51 this program; if not, write to the Free Software Foundation, Inc., 51
Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Author: Jan Lindström jan.lindstrom@skysql.com Author: Jan Lindström jan.lindstrom@mariadb.com
Created: 20-06-2013 Created: 20-06-2013
Updated: Updated:

View File

@ -320,6 +320,7 @@ mlist_t* mlist_init(
list->mlist_nodecount_max = maxnodes; list->mlist_nodecount_max = maxnodes;
/** Set data deletion callback fun */ /** Set data deletion callback fun */
list->mlist_datadel = datadel; list->mlist_datadel = datadel;
if (name != NULL) { if (name != NULL) {
list->mlist_name = name; list->mlist_name = name;
} }
@ -345,6 +346,7 @@ mlist_t* mlist_init(
CHK_MLIST_CURSOR(c); CHK_MLIST_CURSOR(c);
*cursor = c; *cursor = c;
} }
list->mlist_versno = 2; /*< vresno != 0 means that list is initialized */
CHK_MLIST(list); CHK_MLIST(list);
return_list: return_list:

View File

@ -52,9 +52,7 @@ typedef struct mlist_st {
bool mlist_deleted; bool mlist_deleted;
size_t mlist_nodecount; size_t mlist_nodecount;
size_t mlist_nodecount_max; /**< size limit. 0 == no limit */ size_t mlist_nodecount_max; /**< size limit. 0 == no limit */
#if 1
size_t mlist_versno; size_t mlist_versno;
#endif
bool mlist_flat; bool mlist_flat;
mlist_node_t* mlist_first; mlist_node_t* mlist_first;
mlist_node_t* mlist_last; mlist_node_t* mlist_last;