Merge branch 'master' of ssh://git.dcc.fc.up.pt/yap-6.3
This commit is contained in:
commit
61625ca7ad
@ -3204,7 +3204,7 @@ YAP_Reset(yap_reset_t mode)
|
||||
/* always have an empty slots for people to use */
|
||||
P = CP = YESCODE;
|
||||
// ensure that we have slots where we need them
|
||||
Yap_CloseSlots(1);
|
||||
Yap_RebootSlots( worker_id );
|
||||
RECOVER_MACHINE_REGS();
|
||||
return res;
|
||||
}
|
||||
|
2
C/exec.c
2
C/exec.c
@ -1844,7 +1844,7 @@ Yap_InitYaamRegs( int myworker_id )
|
||||
h0var = MkVarTerm();
|
||||
REMOTE_AttsMutableList(myworker_id) = Yap_NewTimedVar(h0var);
|
||||
#endif
|
||||
REMOTE_CurSlot(myworker_id) = 1; /* This function has direct access to the Handles class AKA InitSlot */
|
||||
Yap_RebootSlots( myworker_id );
|
||||
h0var = MkVarTerm();
|
||||
REMOTE_GcGeneration(myworker_id) = Yap_NewTimedVar(h0var);
|
||||
REMOTE_GcCurrentPhase(myworker_id) = 0L;
|
||||
|
14
CXX/yapa.hh
14
CXX/yapa.hh
@ -14,12 +14,12 @@ enum PropTag {
|
||||
FUNCTOR_TAG = FunctorProperty, // 0xBB00,
|
||||
// SPARSE_FUNCTOR_TAG = 0xFFDF,
|
||||
/// arithmetic function
|
||||
ARITHMETIC_PROPERTY_TAG = ExpProperty, // 0xFFE3,
|
||||
ARITHMETIC_PROPERTY_TAG = ExpProperty, // 0xFFE0,
|
||||
/// map the atom to an integer
|
||||
TRANSLATION_TAG = TranslationProperty, // 0xFFF4,
|
||||
/// SWI-STYLE ATOM Extension
|
||||
BLOB_TAG = BlobProperty, // 0xFFF5,
|
||||
/// named mutEX
|
||||
/// ensure the atom may not be garbafe colected
|
||||
HOLD_TAG = HoldProperty, // 0xFFF6
|
||||
/// named mutEX
|
||||
MUTEX_TAG = MutexProperty, // 0xFFF6,
|
||||
/// A typed array, may be in-db or in-stack deped
|
||||
ARRAY_TAG = ArrayProperty, // 0xFFF7,
|
||||
@ -29,12 +29,12 @@ enum PropTag {
|
||||
MODULE_TAG = ModProperty, // 0xFFFA,
|
||||
/// the original SICStus blackboard
|
||||
BLACKBOARD_TAG = BBProperty, // 0xFFFB,
|
||||
/// asociate an atomic value with the atom
|
||||
/// associate an atomic value with the atom
|
||||
VALUE_TAG = ValProperty, // 0xFFFC,
|
||||
/// Demoen's proposal for gkobal variables
|
||||
GLOBAL_VAR_TAG = GlobalProperty, // 0xFFFD
|
||||
/// ensure the atom may not be garbafe colected
|
||||
HOLD_TAG = HoldProperty, // 0xFFF
|
||||
/// SWI-STYLE ATOM Extension
|
||||
BLOB_TAG = BlobProperty, // 0xFFFE,
|
||||
/// Prolog operator,
|
||||
OPERATOR_TAG = OpProperty, // 0xFFFF,
|
||||
};
|
||||
|
@ -48,6 +48,17 @@ Slots are not known to the yaam. Instead, A new set of slots is created when the
|
||||
|
||||
*************************************************************************************************/
|
||||
|
||||
/// @brief reboot the slot system.
|
||||
/// Used when wwe start from scratch (Reset).
|
||||
#define Yap_RebootSlots( wid ) Yap_RebootSlots__( wid PASS_REGS )
|
||||
|
||||
static inline void
|
||||
Yap_RebootSlots__( int wid USES_REGS ) {
|
||||
// fprintf( stderr, " StartSlots = %ld", LOCAL_CurSlot);
|
||||
REMOTE_CurSlot(wid) = 1;
|
||||
}
|
||||
|
||||
|
||||
/// @brief declares a new set of slots.
|
||||
/// Used to tell how many slots we had when we entered a segment of code.
|
||||
#define Yap_StartSlots() Yap_StartSlots__( PASS_REGS1 )
|
||||
|
@ -1598,7 +1598,7 @@ AbsBlobProp (BlobPropEntry * p)
|
||||
|
||||
#endif
|
||||
|
||||
#define BlobProperty ((PropFlags)0xfff5)
|
||||
#define BlobProperty ((PropFlags)0xfffe)
|
||||
|
||||
|
||||
INLINE_ONLY inline EXTERN PropFlags IsBlobProperty (int);
|
||||
|
125
configure
vendored
125
configure
vendored
@ -700,6 +700,7 @@ ARCHIVE_CPPFLAGS
|
||||
ARCHIVE_LIBS
|
||||
ARCHIVE_PLTARGETS
|
||||
ARCHIVE_TARGETS
|
||||
CLIB_FLAGS_LIBUUID
|
||||
CLIB_LIBUUID
|
||||
CLIB_CRYPTOBJ
|
||||
CLIB_CRYPTLIBS
|
||||
@ -10501,7 +10502,8 @@ done
|
||||
|
||||
if test "$yap_cv_mysql" = yes
|
||||
then
|
||||
YAP_EXTRAS="$YAP_EXTRAS -DMYDDAS_MYSQL"
|
||||
use_myddas=true
|
||||
YAP_EXTRAS="$YAP_EXTRAS -DMYDDAS_MYSQL"
|
||||
fi
|
||||
|
||||
case "$target_os" in
|
||||
@ -10728,6 +10730,7 @@ done
|
||||
|
||||
if test "$yap_cv_odbc" != no
|
||||
then
|
||||
use_myddas=true
|
||||
YAP_EXTRAS="$YAP_EXTRAS -DMYDDAS_ODBC"
|
||||
fi
|
||||
|
||||
@ -10791,6 +10794,7 @@ done
|
||||
|
||||
if test "$yap_cv_sqlite3" != no
|
||||
then
|
||||
use_myddas=true
|
||||
YAP_EXTRAS="$YAP_EXTRAS -DMYDDAS_SQLITE3"
|
||||
fi
|
||||
|
||||
@ -10804,6 +10808,11 @@ done
|
||||
YAP_EXTRAS="$YAP_EXTRAS -DMYDDAS_TOP_LEVEL"
|
||||
fi
|
||||
|
||||
if test "$use_myddas" = true; then
|
||||
YAP_EXTRAS="$YAP_EXTRAS -DUSE_MYDDAS=1"
|
||||
fi
|
||||
|
||||
|
||||
MYDDAS_LIBS="$LIBS"
|
||||
LIBS="$OLD_LIBS"
|
||||
CPPFLAGS="$OLD_CPPFLAGS"
|
||||
@ -10829,8 +10838,6 @@ fi
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -11801,6 +11808,7 @@ fi
|
||||
|
||||
|
||||
|
||||
|
||||
CLIB_TARGETS="socket.$SO cgi.$SO memfile.$SO files.$SO mime.$SO crypt.$SO time.$SO"
|
||||
|
||||
case "$PLARCH" in
|
||||
@ -11980,7 +11988,69 @@ fi
|
||||
fi
|
||||
|
||||
|
||||
dl to be installed in various places.
|
||||
|
||||
# brew in OSX
|
||||
if test -d /usr/local/opt/ossp-uuid; then
|
||||
CPPFLAGS="$CPPFLAGS -I /usr/local/opt/ossp-uuid/include"
|
||||
UUID_LIB_PATH="-L /usr/local/opt/ossp-uuid/lib"
|
||||
fi
|
||||
|
||||
# /opt
|
||||
if test -d /opt/include/ossp; then
|
||||
CPPFLAGS="$CPPFLAGS -I /opt/include"
|
||||
UUID_LIB_PATH="-L /opt/lib"
|
||||
fi
|
||||
|
||||
# /usr/local
|
||||
if test -d /opt/include/ossp; then
|
||||
CPPFLAGS="$CPPFLAGS -I /opt/include"
|
||||
UUID_LIB_PATH="-L /opt/lib"
|
||||
fi
|
||||
|
||||
if test x"$UUID_H" = "x"; then
|
||||
ac_fn_c_check_header_compile "$LINENO" "ossp/uuid.h" "ac_cv_header_ossp_uuid_h" "/*first*/
|
||||
"
|
||||
if test "x$ac_cv_header_ossp_uuid_h" = xyes; then :
|
||||
UUID_H=ossp/uuid.h
|
||||
has_uuid=true
|
||||
fi
|
||||
|
||||
|
||||
fi
|
||||
if test x"$UUID_H" = "x" -a ! -d /usr/include/uuid; then
|
||||
ac_fn_c_check_header_compile "$LINENO" "uuid/uuid.h" "ac_cv_header_uuid_uuid_h" "/*first*/
|
||||
"
|
||||
if test "x$ac_cv_header_uuid_uuid_h" = xyes; then :
|
||||
UUID_H=uuid/uuid.h
|
||||
has_uuid=true
|
||||
fi
|
||||
|
||||
|
||||
fi
|
||||
if test x"$UUID_H" = "x"; then
|
||||
ac_fn_c_check_header_compile "$LINENO" "uuid.h" "ac_cv_header_uuid_h" "/*first*/
|
||||
"
|
||||
if test "x$ac_cv_header_uuid_h" = xyes; then :
|
||||
UUID_H=uuid.h
|
||||
has_uuid=true
|
||||
fi
|
||||
|
||||
|
||||
fi
|
||||
if test x"$UUID_H" = "x"; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find uuid.h -- dropping uuid.pl" >&5
|
||||
$as_echo "$as_me: WARNING: Cannot find uuid.h -- dropping uuid.pl" >&2;}
|
||||
else
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define UUID_H <$UUID_H>
|
||||
_ACEOF
|
||||
|
||||
has_uuid=true
|
||||
fi
|
||||
|
||||
if test x"$has_uuid" != "x"; then
|
||||
ac_fn_c_check_func "$LINENO" "uuid_create" "ac_cv_func_uuid_create"
|
||||
if test "x$ac_cv_func_uuid_create" = xyes; then :
|
||||
has_uuid=true
|
||||
@ -12024,7 +12094,7 @@ fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_uuid_uuid_create" >&5
|
||||
$as_echo "$ac_cv_lib_uuid_uuid_create" >&6; }
|
||||
if test "x$ac_cv_lib_uuid_uuid_create" = xyes; then :
|
||||
CLIB_LIBUUID=-luuid
|
||||
CLIB_LIBUUID="$UUID_LIB_PATH -luuid"
|
||||
has_uuid=true
|
||||
|
||||
fi
|
||||
@ -12038,45 +12108,6 @@ $as_echo "$as_me: WARNING: Cannot find libossp-uuid or libuuid -- dropping uuid
|
||||
|
||||
fi
|
||||
|
||||
if test x"$has_uuid" != "x"; then
|
||||
if test x"$UUID_H" = "x"; then
|
||||
ac_fn_c_check_header_compile "$LINENO" "ossp/uuid.h" "ac_cv_header_ossp_uuid_h" "/*first*/
|
||||
"
|
||||
if test "x$ac_cv_header_ossp_uuid_h" = xyes; then :
|
||||
UUID_H=ossp/uuid.h
|
||||
fi
|
||||
|
||||
|
||||
fi
|
||||
if test x"$UUID_H" = "x" -a ! -d /usr/include/uuid; then
|
||||
ac_fn_c_check_header_compile "$LINENO" "uuid/uuid.h" "ac_cv_header_uuid_uuid_h" "/*first*/
|
||||
"
|
||||
if test "x$ac_cv_header_uuid_uuid_h" = xyes; then :
|
||||
UUID_H=uuid/uuid.h
|
||||
fi
|
||||
|
||||
|
||||
fi
|
||||
if test x"$UUID_H" = "x"; then
|
||||
ac_fn_c_check_header_compile "$LINENO" "uuid.h" "ac_cv_header_uuid_h" "/*first*/
|
||||
"
|
||||
if test "x$ac_cv_header_uuid_h" = xyes; then :
|
||||
UUID_H=uuid.h
|
||||
fi
|
||||
|
||||
|
||||
fi
|
||||
if test x"$UUID_H" = "x"; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find uuid.h -- dropping uuid.pl" >&5
|
||||
$as_echo "$as_me: WARNING: Cannot find uuid.h -- dropping uuid.pl" >&2;}
|
||||
else
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define UUID_H <$UUID_H>
|
||||
_ACEOF
|
||||
|
||||
CLIB_TARGETS="$CLIB_TARGETS uuid.$SO"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
@ -14317,7 +14348,7 @@ else
|
||||
JAVA_TEST=Test.java
|
||||
CLASS_TEST=Test.class
|
||||
cat << \EOF > $JAVA_TEST
|
||||
/* #line 14320 "configure" */
|
||||
/* #line 14351 "configure" */
|
||||
public class Test {
|
||||
}
|
||||
EOF
|
||||
@ -14493,7 +14524,7 @@ EOF
|
||||
if uudecode$EXEEXT Test.uue; then
|
||||
ac_cv_prog_uudecode_base64=yes
|
||||
else
|
||||
echo "configure: 14496: uudecode had trouble decoding base 64 file 'Test.uue'" >&5
|
||||
echo "configure: 14527: uudecode had trouble decoding base 64 file 'Test.uue'" >&5
|
||||
echo "configure: failed file was:" >&5
|
||||
cat Test.uue >&5
|
||||
ac_cv_prog_uudecode_base64=no
|
||||
@ -14624,7 +14655,7 @@ else
|
||||
JAVA_TEST=Test.java
|
||||
CLASS_TEST=Test.class
|
||||
cat << \EOF > $JAVA_TEST
|
||||
/* #line 14627 "configure" */
|
||||
/* #line 14658 "configure" */
|
||||
public class Test {
|
||||
}
|
||||
EOF
|
||||
@ -14659,7 +14690,7 @@ JAVA_TEST=Test.java
|
||||
CLASS_TEST=Test.class
|
||||
TEST=Test
|
||||
cat << \EOF > $JAVA_TEST
|
||||
/* [#]line 14662 "configure" */
|
||||
/* [#]line 14693 "configure" */
|
||||
public class Test {
|
||||
public static void main (String args[]) {
|
||||
System.exit (0);
|
||||
|
@ -78,6 +78,8 @@ if (MPI_C_FOUND)
|
||||
|
||||
include_directories (${MPI_INCLUDE_DIRS})
|
||||
|
||||
add_definitions (-DHAVE_MPI_H=1)
|
||||
|
||||
install(TARGETS yap_mpi
|
||||
LIBRARY DESTINATION ${dlls}
|
||||
)
|
||||
|
@ -3,9 +3,6 @@
|
||||
# (EROOT for architecture-dependent files)
|
||||
#
|
||||
#
|
||||
# default base directory for YAP installation
|
||||
# (EROOT for architecture-dependent files)
|
||||
#
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
ROOTDIR = $(prefix)
|
||||
@ -62,7 +59,7 @@ hash.o: $(srcdir)/hash.c $(srcdir)/hash.h
|
||||
@DO_SECOND_LD@ @SHLIB_LD@ $(LDFLAGS) -o yap_mpi.@SO@ $(OBJS) $(MPILDF) @EXTRA_LIBS_FOR_DLLS@
|
||||
|
||||
install: all install-examples
|
||||
@if test "$(SOBJS)" = ""; then echo ""; else $(INSTALL_PROGRAM) $(SOBJS) $(DESTDIR)$(YAPLIBDIR); fi
|
||||
if test x"$(SOBJS)" != "x"; then $(INSTALL_PROGRAM) $(SOBJS) $(DESTDIR)$(YAPLIBDIR); fi
|
||||
|
||||
clean:
|
||||
rm -f *.o *~ $(OBJS) $(SOBJS) *.BAK
|
||||
|
@ -35,7 +35,7 @@ fi
|
||||
dnl LAM/MPI interface
|
||||
|
||||
if test "$yap_cv_mpi" != "no" -a "$INSTALL_DLLS" != "no"; then
|
||||
if test "$yap_cv_mpi" != "yes"; then
|
||||
if test "$yap_cv_mpi" = "yes"; then
|
||||
AC_PATH_PROG(MPI_CC,mpicc,"$CC",$PATH:/sbin:/usr/sbin:/usr/etc:/usr/local/sbin:/usr/lib64/openmpi/bin:/usr/lib/openmpi/bin)
|
||||
else
|
||||
AC_PATH_PROG(MPI_CC,mpicc,"$CC",$yap_cv_mpi/bin:$PATH:/sbin:/usr/sbin:/usr/etc:/usr/local/sbin:/usr/lib64/openmpi/bin:/usr/lib/openmpi/bin)
|
||||
|
47
library/lammpi/examples/gowait
Executable file
47
library/lammpi/examples/gowait
Executable file
@ -0,0 +1,47 @@
|
||||
#!/usr/local/bin/yap -L --
|
||||
|
||||
% called with
|
||||
% mpirun -np 2 gowait.
|
||||
% prints
|
||||
% ------
|
||||
% main
|
||||
% main
|
||||
% after_init
|
||||
% after_init
|
||||
% [0,2]
|
||||
% [1,2]
|
||||
% irecv
|
||||
% wait_end
|
||||
% after_send
|
||||
% c(535755152,)
|
||||
|
||||
:- use_module(library(lam_mpi)).
|
||||
:- use_module(library(system)).
|
||||
main:-
|
||||
write(main),nl,
|
||||
mpi_init,
|
||||
write(after_init),nl,
|
||||
mpi_comm_size(S),
|
||||
mpi_comm_rank(R),
|
||||
write([R,S]),nl,
|
||||
(R == 0->
|
||||
sleep(2),
|
||||
write(wait_end),nl,
|
||||
mpi_send(ciao,1,201),
|
||||
write(after_send),nl
|
||||
;
|
||||
mpi_irecv(0,_201,H),
|
||||
write(irecv),nl,
|
||||
test(H)
|
||||
),
|
||||
mpi_finalize.
|
||||
|
||||
test(H):-
|
||||
(mpi_wait_recv(H,S,Data)->
|
||||
write(c(S,Data)),nl
|
||||
;
|
||||
write(no),nl,
|
||||
test(H)
|
||||
).
|
||||
|
||||
:-main.
|
@ -98,11 +98,23 @@ expand_buffer(const size_t space ) {
|
||||
/*
|
||||
* Changes the size of the buffer to contain at least newsize bytes
|
||||
*/
|
||||
void
|
||||
change_buffer_size(const size_t newsize) {
|
||||
if ( BUFFER_SIZE>=BLOCK_SIZE && BUFFER_SIZE>=newsize)
|
||||
return;
|
||||
if (realloc( BUFFER_PTR, newsize) == NULL) {
|
||||
void change_buffer_size(const size_t newsize) {
|
||||
if ( BUFFER_PTR == NULL )
|
||||
{
|
||||
if ((BUFFER_PTR = malloc( BLOCK_SIZE < newsize ? newsize : BLOCK_SIZE)) == NULL) {
|
||||
YAP_Error(0,0,"Prolog2Term: Out of memory.\n");
|
||||
#ifdef MPI
|
||||
MPI_Finalize();
|
||||
#endif
|
||||
YAP_Exit( 1 );
|
||||
}
|
||||
}
|
||||
else if ((BUFFER_SIZE>=BLOCK_SIZE &&
|
||||
BUFFER_SIZE>=newsize) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
else if ((BUFFER_PTR = realloc( BUFFER_PTR, newsize)) == NULL) {
|
||||
YAP_Error(0,0,"Prolog2Term: Out of memory.\n");
|
||||
#ifdef MPI
|
||||
MPI_Finalize();
|
||||
@ -137,7 +149,7 @@ p2c_putt(const YAP_Term t) {
|
||||
size_t
|
||||
write_term_to_stream(const int fd,const YAP_Term term) {
|
||||
|
||||
RESET_BUFFER;
|
||||
RESET_BUFFER();
|
||||
printf("BUFFER_PTR=%p\n", BUFFER_PTR);
|
||||
p2c_putt(term);
|
||||
if (write(fd,(void*)BUFFER_PTR,BUFFER_LEN) < 0) { // write term
|
||||
@ -154,7 +166,7 @@ YAP_Term
|
||||
read_term_from_stream(const int fd) {
|
||||
size_t size;
|
||||
|
||||
RESET_BUFFER;
|
||||
RESET_BUFFER();
|
||||
if (!read(fd,(void*)&size,sizeof(size_t))) { // read the size of the term
|
||||
YAP_Error(0,0,"Prolog2Term: IO error in read.\n");
|
||||
}
|
||||
@ -179,7 +191,7 @@ read_term_from_stream(const int fd) {
|
||||
char*
|
||||
term2string(char *const ptr, size_t *size, const YAP_Term t) {
|
||||
char *ret;
|
||||
RESET_BUFFER;
|
||||
RESET_BUFFER();
|
||||
|
||||
do {
|
||||
if (*size == 0) {
|
||||
|
@ -68,16 +68,17 @@ void write_msg(const char *fun,const char *file, int line,const char *format, ..
|
||||
* Macros to manipulate the buffer
|
||||
*********************************************************************************************/
|
||||
|
||||
extern int BLOCK_SIZE;
|
||||
extern size_t BLOCK_SIZE;
|
||||
|
||||
#define buffer (buffers[YAP_ThreadSelf()])
|
||||
|
||||
// deletes the buffer (all fields) but does not release the memory of the buffer.ptr
|
||||
#define DEL_BUFFER {buffer.ptr=NULL;buffer.size=0;buffer.len=0;buffer.pos=0;}
|
||||
#define DEL_BUFFER() {buffer.ptr=NULL;buffer.size=0;buffer.len=0;buffer.pos=0;}
|
||||
// informs the prologterm2c module that the buffer is now used and should not be messed
|
||||
#define USED_BUFFER() DEL_BUFFER
|
||||
#define USED_BUFFER() DEL_BUFFER()
|
||||
// initialize buffer
|
||||
#define RESET_BUFFER {buffer.len=0;change_buffer_size(BLOCK_SIZE);buffer.pos=0;}
|
||||
#define RESET_BUFFER() \
|
||||
{buffer.len=0;change_buffer_size(BLOCK_SIZE);buffer.pos=0;}
|
||||
#define BUFFER_PTR buffer.ptr
|
||||
#define BUFFER_SIZE buffer.size
|
||||
#define BUFFER_LEN buffer.len
|
||||
|
@ -1,14 +1,14 @@
|
||||
/*
|
||||
Copyright (C) 2004,2005,2006 (Nuno A. Fonseca) <nuno.fonseca@gmail.com>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
This program 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; either
|
||||
version 2 of the License, or (at your option) any later
|
||||
version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
but WITHOUT ANY WxuARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
@ -69,7 +69,7 @@ typedef struct broadcast_req BroadcastRequest;
|
||||
/********************************************************************
|
||||
* Auxiliary data
|
||||
********************************************************************/
|
||||
static int mpi_statuss[1024];
|
||||
static YAP_Bool mpi_statuss[1024];
|
||||
#define mpi_status (mpi_statuss[YAP_ThreadSelf()])
|
||||
|
||||
extern int GLOBAL_argc;
|
||||
@ -108,7 +108,7 @@ static double total_time_spent; // total time spend in communication code
|
||||
#define CONT_TIMER() {tstart();}
|
||||
#define PAUSE_TIMER() {tend();total_time_spent+=tval();}
|
||||
|
||||
#define RETURN(p) {PAUSE_TIMER();return (p);}
|
||||
#define return(p) {PAUSE_TIMER();return (p);}
|
||||
|
||||
static struct timeval _tstarts[1024], _tends[1024];
|
||||
|
||||
@ -141,7 +141,7 @@ double tval(){
|
||||
/*
|
||||
* returns the statistics
|
||||
*/
|
||||
static int mpi_stats(void){
|
||||
static YAP_Bool mpi_stats(void){
|
||||
fprintf(stderr,"%f %ld %ld %ld %ld %ld %ld\n",MPITIME,num_msgs_recv,bytes_recv,max_s_recv_msg,num_msgs_sent,bytes_sent,max_s_sent_msg);
|
||||
return (YAP_Unify(YAP_ARG1, YAP_MkFloatTerm((float)(MPITIME))) &&
|
||||
YAP_Unify(YAP_ARG2, YAP_MkIntTerm((long)num_msgs_recv)) &&
|
||||
@ -155,7 +155,7 @@ static int mpi_stats(void){
|
||||
/*
|
||||
*
|
||||
*/
|
||||
static int mpi_reset_stats(void) {RESET_STATS(); return (TRUE);}
|
||||
static YAP_Bool mpi_reset_stats(void) {RESET_STATS(); return true;}
|
||||
#else
|
||||
|
||||
#define PAUSE_TIMER()
|
||||
@ -165,7 +165,7 @@ static int mpi_reset_stats(void) {RESET_STATS(); return (TRUE);}
|
||||
#define RESET_STATS()
|
||||
#define MSG_SENT(size)
|
||||
#define MSG_RECV(size)
|
||||
#define RETURN(p) {return (p);}
|
||||
#define return(p) {return (p);}
|
||||
#endif
|
||||
|
||||
/********************************************************************
|
||||
@ -240,7 +240,7 @@ new_broadcast_request(BroadcastRequest* b,MPI_Request *handle,void* ptr) {
|
||||
}
|
||||
|
||||
/*********************************************************************/
|
||||
static int mpi_error(int errcode){
|
||||
static YAP_Bool mpi_error(int errcode){
|
||||
char err_msg[MPI_MAX_ERROR_STRING];
|
||||
int len;
|
||||
|
||||
@ -258,7 +258,7 @@ static int mpi_error(int errcode){
|
||||
* Sets up the mpi enviromment. This function should be called before any other MPI
|
||||
* function.
|
||||
*/
|
||||
static int
|
||||
static YAP_Bool
|
||||
mpi_init(void){
|
||||
int thread_level;
|
||||
char ** my_argv;
|
||||
@ -271,7 +271,7 @@ mpi_init(void){
|
||||
#ifdef MPISTATS
|
||||
RESET_STATS();
|
||||
#endif
|
||||
return (TRUE);
|
||||
return true;
|
||||
}
|
||||
|
||||
#ifdef USE_THREADS
|
||||
@ -280,7 +280,7 @@ mpi_init(void){
|
||||
* function.
|
||||
* the argument is the name of the predicate that will be invoked when a message is received
|
||||
*/
|
||||
static int
|
||||
static YAP_Bool
|
||||
rcv_msg_thread(char *handle_pred) {
|
||||
YAP_Term pred=YAP_MkAtomTerm(YAP_LookupAtom(handle_pred));
|
||||
MPI_Status status;
|
||||
@ -299,7 +299,7 @@ rcv_msg_thread(char *handle_pred) {
|
||||
/*
|
||||
*
|
||||
*/
|
||||
static int
|
||||
static YAP_Bool
|
||||
mpi_init_rcv_thread(void){
|
||||
int thread_level;
|
||||
// MPI_Init(&GLOBAL_argc, &GLOBAL_argv);
|
||||
@ -308,12 +308,12 @@ mpi_init_rcv_thread(void){
|
||||
|
||||
MPI_Init_thread(&GLOBAL_argc, &GLOBAL_argv,MPI_THREAD_SINGLE,&thread_level);
|
||||
if(pthread_create(&thread,NULL,(void*)&rcv_msg_thread,arg)) {
|
||||
return (FALSE);
|
||||
return false;
|
||||
}
|
||||
|
||||
pthread_detach(thread);
|
||||
write_msg(__FUNCTION__,__FILE__,__LINE__,"Thread level: %d\n",thread_level);
|
||||
return (TRUE);
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -322,15 +322,15 @@ mpi_init_rcv_thread(void){
|
||||
* exiting.
|
||||
* mpi_comm_finalize.
|
||||
*/
|
||||
static int
|
||||
static YAP_Bool
|
||||
mpi_finalize(void){
|
||||
return (MPI_Finalize()==MPI_SUCCESS?TRUE:FALSE);
|
||||
return (MPI_Finalize()==MPI_SUCCESS?true:false);
|
||||
}
|
||||
/*
|
||||
* Returns the number of workers associated to the MPI_COMM_WORLD communicator.
|
||||
* mpi_comm_size(-Size).
|
||||
*/
|
||||
static int
|
||||
static YAP_Bool
|
||||
mpi_comm_size(void){
|
||||
int size;
|
||||
MPI_CALL(MPI_Comm_size(MPI_COMM_WORLD, &size));
|
||||
@ -340,7 +340,7 @@ mpi_comm_size(void){
|
||||
* Returns the rank of the current process.
|
||||
* mpi_comm_rank(-Rank).
|
||||
*/
|
||||
static int
|
||||
static YAP_Bool
|
||||
mpi_comm_rank(void){
|
||||
int rank;
|
||||
MPI_CALL(MPI_Comm_rank(MPI_COMM_WORLD, &rank));
|
||||
@ -350,7 +350,7 @@ mpi_comm_rank(void){
|
||||
* Returns the major and minor version of MPI.
|
||||
* mpi_version(-Major,-Minor).
|
||||
*/
|
||||
static int
|
||||
static YAP_Bool
|
||||
mpi_version(void){
|
||||
int major,minor;
|
||||
|
||||
@ -361,7 +361,7 @@ mpi_version(void){
|
||||
*
|
||||
*
|
||||
*/
|
||||
static int
|
||||
static YAP_Bool
|
||||
mpi_get_processor_name(void) {
|
||||
char name[MPI_MAX_PROCESSOR_NAME];
|
||||
int length;
|
||||
@ -375,7 +375,7 @@ mpi_get_processor_name(void) {
|
||||
*
|
||||
* mpi_isend(+Data, +Destination, +Tag, -Handle).
|
||||
*/
|
||||
static int
|
||||
static YAP_Bool
|
||||
mpi_isend(void) {
|
||||
YAP_Term t1 = YAP_Deref(YAP_ARG1),
|
||||
t2 = YAP_Deref(YAP_ARG2),
|
||||
@ -387,11 +387,11 @@ mpi_isend(void) {
|
||||
MPI_Request *handle=(MPI_Request*)malloc(sizeof(MPI_Request));
|
||||
|
||||
CONT_TIMER();
|
||||
if ( handle==NULL ) return (FALSE);
|
||||
if ( handle==NULL ) return false;
|
||||
|
||||
if (YAP_IsVarTerm(t1) || !YAP_IsIntTerm(t2) || !YAP_IsIntTerm(t3) || !YAP_IsVarTerm(t4)) {
|
||||
PAUSE_TIMER();
|
||||
RETURN(FALSE);
|
||||
return false;
|
||||
}
|
||||
//
|
||||
dest = YAP_IntOfTerm(t2);
|
||||
@ -402,7 +402,7 @@ mpi_isend(void) {
|
||||
// send the data
|
||||
if( MPI_CALL(MPI_Isend( str, len, MPI_CHAR, dest, tag, MPI_COMM_WORLD ,handle)) != MPI_SUCCESS ) {
|
||||
PAUSE_TIMER();
|
||||
RETURN(FALSE);
|
||||
return false;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
@ -412,14 +412,14 @@ mpi_isend(void) {
|
||||
// We must associate the string to each handle
|
||||
new_request(handle,str);
|
||||
PAUSE_TIMER();
|
||||
RETURN(YAP_Unify(YAP_ARG4,YAP_MkIntTerm(HANDLE2INT(handle))));// it should always succeed
|
||||
return(YAP_Unify(YAP_ARG4,YAP_MkIntTerm(HANDLE2INT(handle))));// it should always succeed
|
||||
}
|
||||
|
||||
/*
|
||||
* Blocking communication function. The message is sent immediatly.
|
||||
* mpi_send(+Data, +Destination, +Tag).
|
||||
*/
|
||||
static int
|
||||
static YAP_Bool
|
||||
mpi_send(void) {
|
||||
|
||||
YAP_Term t1 = YAP_Deref(YAP_ARG1),
|
||||
@ -430,7 +430,7 @@ mpi_send(void) {
|
||||
size_t len=0;
|
||||
int val;
|
||||
if (YAP_IsVarTerm(t1) || !YAP_IsIntTerm(t2) || !YAP_IsIntTerm(t3)) {
|
||||
return (FALSE);
|
||||
return false;
|
||||
}
|
||||
|
||||
CONT_TIMER();
|
||||
@ -439,20 +439,20 @@ mpi_send(void) {
|
||||
tag = YAP_IntOfTerm(t3);
|
||||
// the data is packaged as a string
|
||||
str=term2string(NULL,&len,t1);
|
||||
#ifdef DEBUG
|
||||
#if defined(DEBUG) && 0
|
||||
write_msg(__FUNCTION__,__FILE__,__LINE__,"%s(%s,%u, MPI_CHAR,%d,%d)\n",__FUNCTION__,str,len,dest,tag);
|
||||
#endif
|
||||
// send the data
|
||||
val=(MPI_CALL(MPI_Send( str, len, MPI_CHAR, dest, tag, MPI_COMM_WORLD))==MPI_SUCCESS?TRUE:FALSE);
|
||||
val=(MPI_CALL(MPI_Send( str, len, MPI_CHAR, dest, tag, MPI_COMM_WORLD))==MPI_SUCCESS?true:false);
|
||||
|
||||
PAUSE_TIMER();
|
||||
RETURN(val);
|
||||
return(val);
|
||||
}
|
||||
/*
|
||||
* Implements a blocking receive operation.
|
||||
* mpi_recv(?Source,?Tag,-Data).
|
||||
*/
|
||||
static int
|
||||
static YAP_Bool
|
||||
mpi_recv(void) {
|
||||
YAP_Term t1 = YAP_Deref(YAP_ARG1),
|
||||
t2 = YAP_Deref(YAP_ARG2),
|
||||
@ -464,32 +464,32 @@ mpi_recv(void) {
|
||||
|
||||
//The third argument (data) must be unbound
|
||||
if(!YAP_IsVarTerm(t3)) {
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
/* The first argument (Source) must be bound to an integer
|
||||
(the rank of the source) or left unbound (i.e. any source
|
||||
is OK) */
|
||||
if (YAP_IsVarTerm(t1)) orig = MPI_ANY_SOURCE;
|
||||
else if( !YAP_IsIntTerm(t1) ) return (FALSE);
|
||||
else if( !YAP_IsIntTerm(t1) ) return false;
|
||||
else orig = YAP_IntOfTerm(t1);
|
||||
|
||||
/* The second argument must be bound to an integer (the tag)
|
||||
or left unbound (i.e. any tag is OK) */
|
||||
if (YAP_IsVarTerm(t2)) tag = MPI_ANY_TAG;
|
||||
else if( !YAP_IsIntTerm(t2) ) return (FALSE);
|
||||
else if( !YAP_IsIntTerm(t2) ) return false;
|
||||
else tag = YAP_IntOfTerm( t2 );
|
||||
|
||||
CONT_TIMER();
|
||||
// probe for term' size
|
||||
if( MPI_CALL(MPI_Probe( orig, tag, MPI_COMM_WORLD, &status )) != MPI_SUCCESS) {
|
||||
PAUSE_TIMER();
|
||||
RETURN(FALSE);
|
||||
return false;
|
||||
}
|
||||
if( MPI_CALL(MPI_Get_count( &status, MPI_CHAR, &len )) != MPI_SUCCESS ||
|
||||
status.MPI_TAG==MPI_UNDEFINED ||
|
||||
status.MPI_SOURCE==MPI_UNDEFINED) {
|
||||
PAUSE_TIMER();
|
||||
RETURN(FALSE);
|
||||
return false;
|
||||
}
|
||||
//realloc memory buffer
|
||||
change_buffer_size((size_t)(len+1));
|
||||
@ -499,7 +499,7 @@ mpi_recv(void) {
|
||||
orig = status.MPI_SOURCE;
|
||||
if( !YAP_Unify(t1, YAP_MkIntTerm(orig))) {
|
||||
PAUSE_TIMER();
|
||||
RETURN(FALSE);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// Already know the tag from MPI_Probe()
|
||||
@ -507,7 +507,7 @@ mpi_recv(void) {
|
||||
tag = status.MPI_TAG;
|
||||
if( !YAP_Unify(t2, YAP_MkIntTerm(status.MPI_TAG))) {
|
||||
PAUSE_TIMER();
|
||||
RETURN(FALSE);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// Receive the message as a string
|
||||
@ -517,7 +517,7 @@ mpi_recv(void) {
|
||||
package (containing size) was sent properly, but there was a glitch with
|
||||
the actual content! */
|
||||
PAUSE_TIMER();
|
||||
RETURN(FALSE);
|
||||
return false;
|
||||
}
|
||||
#ifdef DEBUG
|
||||
write_msg(__FUNCTION__,__FILE__,__LINE__,"%s(%s,%u, MPI_CHAR,%d,%d)\n",__FUNCTION__,BUFFER_PTR, BUFFER_LEN, orig, tag);
|
||||
@ -525,50 +525,50 @@ mpi_recv(void) {
|
||||
MSG_RECV(BUFFER_LEN);
|
||||
t4=string2term(BUFFER_PTR,&BUFFER_LEN);
|
||||
PAUSE_TIMER();
|
||||
RETURN(YAP_Unify(YAP_ARG3,t4));
|
||||
return(YAP_Unify(YAP_ARG3,t4));
|
||||
}
|
||||
|
||||
/*
|
||||
* Implements a non-blocking receive operation.
|
||||
* mpi_irecv(?Source,?Tag,-Handle).
|
||||
*/
|
||||
static int
|
||||
static YAP_Bool
|
||||
mpi_irecv(void) {
|
||||
YAP_Term t1 = YAP_Deref(YAP_ARG1),
|
||||
t2 = YAP_Deref(YAP_ARG2),
|
||||
t3 = YAP_Deref(YAP_ARG3);
|
||||
int tag, orig;
|
||||
MPI_Request *handle=(MPI_Request*)malloc(sizeof(MPI_Request));
|
||||
MPI_Request *mpi_req=(MPI_Request*)malloc(sizeof(MPI_Request));
|
||||
|
||||
// The third argument (data) must be unbound
|
||||
// The third argument (data) must be unbound
|
||||
if(!YAP_IsVarTerm(t3)) {
|
||||
//Yap_Error(INSTANTIATION_ERROR, t_data, "mpi_receive");
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
/* The first argument (Source) must be bound to an integer
|
||||
(the rank of the source) or left unbound (i.e. any source
|
||||
is OK) */
|
||||
if (YAP_IsVarTerm(t1)) orig = MPI_ANY_SOURCE;
|
||||
else if( !YAP_IsIntTerm(t1) ) return (FALSE);
|
||||
else if( !YAP_IsIntTerm(t1) ) return false;
|
||||
else orig = YAP_IntOfTerm(t1);
|
||||
|
||||
/* The third argument must be bound to an integer (the tag)
|
||||
or left unbound (i.e. any tag is OK) */
|
||||
if (YAP_IsVarTerm(t2)) tag = MPI_ANY_TAG;
|
||||
else if( !YAP_IsIntTerm(t2) ) return (FALSE);
|
||||
else if( !YAP_IsIntTerm(t2) ) return false;
|
||||
else tag = YAP_IntOfTerm( t2 );
|
||||
|
||||
CONT_TIMER();
|
||||
RESET_BUFFER;
|
||||
RESET_BUFFER();
|
||||
if( MPI_CALL(MPI_Irecv( BUFFER_PTR, BLOCK_SIZE, MPI_CHAR, orig, tag,
|
||||
MPI_COMM_WORLD, handle )) != MPI_SUCCESS ) {
|
||||
MPI_COMM_WORLD, mpi_req )) != MPI_SUCCESS ) {
|
||||
PAUSE_TIMER();
|
||||
RETURN(FALSE);
|
||||
return false;
|
||||
}
|
||||
new_request(handle,BUFFER_PTR);
|
||||
DEL_BUFFER; // force the realocation of a new memory block
|
||||
new_request(mpi_req,BUFFER_PTR);
|
||||
DEL_BUFFER();
|
||||
PAUSE_TIMER();
|
||||
RETURN(YAP_Unify(t3,YAP_MkIntTerm(HANDLE2INT(handle))));
|
||||
return YAP_Unify(t3,YAP_MkIntTerm(HANDLE2INT(mpi_req)));
|
||||
}
|
||||
|
||||
/*
|
||||
@ -579,7 +579,7 @@ mpi_irecv(void) {
|
||||
* buffer.
|
||||
* mpi_wait(+Handle,-Status).
|
||||
*/
|
||||
static int
|
||||
static YAP_Bool
|
||||
mpi_wait(void) {
|
||||
YAP_Term t1 = YAP_Deref(YAP_ARG1), // Handle
|
||||
t2 = YAP_Deref(YAP_ARG2); // Status
|
||||
@ -588,27 +588,29 @@ mpi_wait(void) {
|
||||
|
||||
// The first argument must be an integer (an handle)
|
||||
if(!YAP_IsIntTerm(t1)) {
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
handle=INT2HANDLE(YAP_IntOfTerm(t1));
|
||||
CONT_TIMER();
|
||||
// probe for term' size
|
||||
if( MPI_CALL(MPI_Wait( handle , &status )) != MPI_SUCCESS ) {
|
||||
PAUSE_TIMER();
|
||||
RETURN(FALSE);
|
||||
return false;
|
||||
}
|
||||
free_request(handle);
|
||||
PAUSE_TIMER();
|
||||
RETURN(YAP_Unify(t2,YAP_MkIntTerm(status.MPI_ERROR)));
|
||||
return(YAP_Unify(t2,YAP_MkIntTerm(status.MPI_ERROR)));
|
||||
}
|
||||
|
||||
/*
|
||||
* mpi_test(+Handle,-Status)
|
||||
*
|
||||
* Provides information regarding a handle, ie. if a communication operation has been completed.
|
||||
* If the operation has been completed the predicate succeeds with the completion status,
|
||||
* otherwise it fails.
|
||||
* mpi_test(+Handle,-Status).
|
||||
* ).
|
||||
*/
|
||||
static int
|
||||
static YAP_Bool
|
||||
mpi_test(void) {
|
||||
YAP_Term t1 = YAP_Deref(YAP_ARG1), // Handle
|
||||
t2 = YAP_Deref(YAP_ARG2); // Status
|
||||
@ -618,31 +620,32 @@ mpi_test(void) {
|
||||
|
||||
// The first argument (handle) must be an integer
|
||||
if(!YAP_IsIntTerm(t1)) {
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
CONT_TIMER();
|
||||
|
||||
handle=INT2HANDLE(YAP_IntOfTerm(t1));
|
||||
//
|
||||
MPI_CALL(MPI_Test( handle , &flag, &status ));
|
||||
if( flag != TRUE ) {
|
||||
if( flag != true ) {
|
||||
PAUSE_TIMER();
|
||||
RETURN(FALSE);
|
||||
return false;
|
||||
}
|
||||
free_request(handle);
|
||||
PAUSE_TIMER();
|
||||
RETURN(YAP_Unify(t2,YAP_MkIntTerm(status.MPI_ERROR)));
|
||||
return(YAP_Unify(t2,YAP_MkIntTerm(status.MPI_ERROR)));
|
||||
}
|
||||
|
||||
/*
|
||||
/** mpi_wait(+Handle,-Status,-Data
|
||||
*
|
||||
* Completes a non-blocking operation. IF the operation was a send, the
|
||||
* function waits until the message is buffered or sent by the runtime
|
||||
* system. At this point the send buffer is released. If the operation
|
||||
* was a receive, it waits until the message is copied to the receive
|
||||
* buffer.
|
||||
* mpi_wait(+Handle,-Status,-Data).
|
||||
* .
|
||||
*/
|
||||
static int
|
||||
static YAP_Bool
|
||||
mpi_wait_recv(void) {
|
||||
YAP_Term t1 = YAP_Deref(YAP_ARG1); // data
|
||||
MPI_Status status;
|
||||
@ -653,7 +656,7 @@ mpi_wait_recv(void) {
|
||||
|
||||
// The first argument (handle) must be an integer
|
||||
if(!YAP_IsIntTerm(t1)) {
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
CONT_TIMER();
|
||||
|
||||
@ -662,7 +665,7 @@ mpi_wait_recv(void) {
|
||||
// wait for communication completion
|
||||
if( MPI_CALL(MPI_Wait( handle , &status )) != MPI_SUCCESS) {
|
||||
PAUSE_TIMER();
|
||||
RETURN(FALSE);
|
||||
return false;
|
||||
}
|
||||
len=YAP_SizeOfExportedTerm(s);
|
||||
// make sure we only fetch ARG3 after constructing the term
|
||||
@ -671,7 +674,7 @@ mpi_wait_recv(void) {
|
||||
free_request(handle);
|
||||
PAUSE_TIMER();
|
||||
ret=YAP_Unify(YAP_ARG3,out);
|
||||
RETURN(ret & YAP_Unify(YAP_ARG2,YAP_MkIntTerm(status.MPI_ERROR)));
|
||||
return(ret & YAP_Unify(YAP_ARG2,YAP_MkIntTerm(status.MPI_ERROR)));
|
||||
}
|
||||
|
||||
/*
|
||||
@ -681,7 +684,7 @@ mpi_wait_recv(void) {
|
||||
*
|
||||
* mpi_test(+Handle,-Status,-Data).
|
||||
*/
|
||||
static int
|
||||
static YAP_Bool
|
||||
mpi_test_recv(void) {
|
||||
YAP_Term t1 = YAP_Deref(YAP_ARG1); // data
|
||||
|
||||
@ -693,7 +696,7 @@ mpi_test_recv(void) {
|
||||
|
||||
// The first argument (handle) must be an integer
|
||||
if(!YAP_IsIntTerm(t1)) {
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
CONT_TIMER();
|
||||
|
||||
@ -701,7 +704,7 @@ mpi_test_recv(void) {
|
||||
//
|
||||
if( MPI_CALL(MPI_Test( handle , &flag, &status ))!=MPI_SUCCESS) {
|
||||
PAUSE_TIMER();
|
||||
RETURN(FALSE);
|
||||
return false;
|
||||
}
|
||||
s=(char*)get_request(handle);
|
||||
len=strlen(s);
|
||||
@ -710,19 +713,19 @@ mpi_test_recv(void) {
|
||||
ret=YAP_Unify(YAP_ARG3,out);
|
||||
free_request(handle);
|
||||
PAUSE_TIMER();
|
||||
RETURN(ret & YAP_Unify(YAP_ARG2,YAP_MkIntTerm(status.MPI_ERROR)));
|
||||
return(ret & YAP_Unify(YAP_ARG2,YAP_MkIntTerm(status.MPI_ERROR)));
|
||||
}
|
||||
|
||||
/*
|
||||
* Collective communication function that performs a barrier synchronization among all processes.
|
||||
* mpi_barrier
|
||||
*/
|
||||
static int
|
||||
static YAP_Bool
|
||||
mpi_barrier(void) {
|
||||
CONT_TIMER();
|
||||
int ret=MPI_CALL(MPI_Barrier(MPI_COMM_WORLD));
|
||||
PAUSE_TIMER();
|
||||
return (ret==MPI_SUCCESS?TRUE:FALSE);
|
||||
return (ret==MPI_SUCCESS?true:false);
|
||||
}
|
||||
/***********************************
|
||||
* Broadcast
|
||||
@ -735,7 +738,7 @@ mpi_barrier(void) {
|
||||
*
|
||||
* mpi_bcast(+Root,+Data).
|
||||
*/
|
||||
static int
|
||||
static YAP_Bool
|
||||
mpi_bcast(void) {
|
||||
YAP_Term t1 = YAP_Deref(YAP_ARG1),
|
||||
t2 = YAP_Deref(YAP_ARG2);
|
||||
@ -745,7 +748,7 @@ mpi_bcast(void) {
|
||||
int rank;
|
||||
//The arguments should be bound
|
||||
if(!YAP_IsIntTerm(t1)) {
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
MPI_CALL(MPI_Comm_rank(MPI_COMM_WORLD, &rank));
|
||||
|
||||
@ -757,12 +760,12 @@ mpi_bcast(void) {
|
||||
write_msg(__FUNCTION__,__FILE__,__LINE__,"mpi_bcast(%s,%u, MPI_CHAR,%d)\n",str,len,root);
|
||||
#endif
|
||||
} else {
|
||||
RESET_BUFFER;
|
||||
RESET_BUFFER();
|
||||
str = BUFFER_PTR;
|
||||
len = BLOCK_SIZE;
|
||||
}
|
||||
// send the data
|
||||
val=(MPI_CALL(MPI_Bcast( str, len, MPI_CHAR, root, MPI_COMM_WORLD))==MPI_SUCCESS?TRUE:FALSE);
|
||||
val=(MPI_CALL(MPI_Bcast( str, len, MPI_CHAR, root, MPI_COMM_WORLD))==MPI_SUCCESS?true:false);
|
||||
|
||||
|
||||
#ifdef MPISTATS
|
||||
@ -780,9 +783,9 @@ mpi_bcast(void) {
|
||||
out = string2term(str,(size_t*)&len);
|
||||
MSG_RECV(len);
|
||||
if (!YAP_Unify(YAP_ARG2, out))
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
RETURN(val);
|
||||
return(val);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -792,7 +795,7 @@ mpi_bcast(void) {
|
||||
* To be able to use a regular MPI_Recv to recv the messages, one should use mpi_bcast2
|
||||
* mpi_bcast_int(+Root,+Data,+Tag).
|
||||
*/
|
||||
static int
|
||||
static YAP_Bool
|
||||
my_bcast(YAP_Term t1,YAP_Term t2, YAP_Term t3) {
|
||||
int root;
|
||||
int k,worldsize;
|
||||
@ -802,7 +805,7 @@ my_bcast(YAP_Term t1,YAP_Term t2, YAP_Term t3) {
|
||||
|
||||
//The arguments should be bound
|
||||
if(YAP_IsVarTerm(t2) || !YAP_IsIntTerm(t1) || !YAP_IsIntTerm(t3)) {
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
CONT_TIMER();
|
||||
@ -819,19 +822,19 @@ my_bcast(YAP_Term t1,YAP_Term t2, YAP_Term t3) {
|
||||
MSG_SENT(len);
|
||||
if(MPI_CALL(MPI_Send( str, len, MPI_CHAR, k, tag, MPI_COMM_WORLD))!=MPI_SUCCESS) {
|
||||
PAUSE_TIMER();
|
||||
return(FALSE);
|
||||
return false;
|
||||
}
|
||||
#ifdef DEBUG
|
||||
write_msg(__FUNCTION__,__FILE__,__LINE__,"bcast2(%s,%u, MPI_CHAR,%d,%d)\n",str,len,k,tag);
|
||||
#endif
|
||||
}
|
||||
PAUSE_TIMER();
|
||||
RETURN(TRUE);
|
||||
return true;
|
||||
}
|
||||
/*
|
||||
* mpi_bcast(+Root,+Data).
|
||||
*/
|
||||
static int
|
||||
static YAP_Bool
|
||||
mpi_bcast2(void) {
|
||||
return my_bcast(YAP_ARG1,YAP_ARG2,YAP_MkIntTerm(0));
|
||||
}
|
||||
@ -843,7 +846,7 @@ mpi_bcast2(void) {
|
||||
*
|
||||
* mpi_bcast(+Root,+Data,+Tag).
|
||||
*/
|
||||
static int
|
||||
static YAP_Bool
|
||||
mpi_bcast3(void) {
|
||||
return my_bcast(YAP_ARG1,YAP_ARG2,YAP_ARG3);
|
||||
}
|
||||
@ -852,7 +855,7 @@ mpi_bcast3(void) {
|
||||
* all other processes of the group.
|
||||
* mpi_ibcast(+Root,+Data,+Tag).
|
||||
*/
|
||||
static int
|
||||
static YAP_Bool
|
||||
my_ibcast(YAP_Term t1,YAP_Term t2, YAP_Term t3) {
|
||||
int root;
|
||||
int k,worldsize;
|
||||
@ -864,7 +867,7 @@ my_ibcast(YAP_Term t1,YAP_Term t2, YAP_Term t3) {
|
||||
//fprintf(stderr,"ibcast1");
|
||||
//The arguments should be bound
|
||||
if(YAP_IsVarTerm(t2) || !YAP_IsIntTerm(t1) || !YAP_IsIntTerm(t3)) {
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
CONT_TIMER();
|
||||
@ -878,7 +881,7 @@ my_ibcast(YAP_Term t1,YAP_Term t2, YAP_Term t3) {
|
||||
b=new_broadcast();
|
||||
if ( b==NULL ) {
|
||||
PAUSE_TIMER();
|
||||
RETURN(FALSE);
|
||||
return false;
|
||||
}
|
||||
//fprintf(stderr,"ibcast3");
|
||||
for(k=0;k<=worldsize-1;++k) {
|
||||
@ -889,7 +892,7 @@ my_ibcast(YAP_Term t1,YAP_Term t2, YAP_Term t3) {
|
||||
if(MPI_CALL(MPI_Isend(str, len, MPI_CHAR, k, tag, MPI_COMM_WORLD,handle))!=MPI_SUCCESS) {
|
||||
free(handle);
|
||||
PAUSE_TIMER();
|
||||
RETURN(FALSE);
|
||||
return false;
|
||||
}
|
||||
new_broadcast_request(b,handle,str);
|
||||
//new_request(handle,str);
|
||||
@ -899,7 +902,7 @@ my_ibcast(YAP_Term t1,YAP_Term t2, YAP_Term t3) {
|
||||
if(!b->nreq)//release b if no messages were sent (worldsize==1)
|
||||
free(b);
|
||||
|
||||
#ifdef DEBUG
|
||||
#if defined(DEBUG) && defined(MALLINFO)
|
||||
{
|
||||
struct mallinfo s = mallinfo();
|
||||
printf("%d: %d=%d/%d\n",getpid(),s.arena,s.uordblks,s.fordblks); //vsc
|
||||
@ -907,7 +910,7 @@ my_ibcast(YAP_Term t1,YAP_Term t2, YAP_Term t3) {
|
||||
#endif
|
||||
PAUSE_TIMER();
|
||||
//fprintf(stderr,"ibcast4");
|
||||
RETURN(TRUE);
|
||||
return true;
|
||||
}
|
||||
/*
|
||||
* Broadcasts a message from the process with rank "root" to
|
||||
@ -916,14 +919,14 @@ my_ibcast(YAP_Term t1,YAP_Term t2, YAP_Term t3) {
|
||||
* The message is sent using MPI_Isend
|
||||
* mpi_ibcast(+Root,+Data,+Tag).
|
||||
*/
|
||||
static int
|
||||
static YAP_Bool
|
||||
mpi_ibcast3(void) {
|
||||
return my_ibcast(YAP_ARG1,YAP_ARG2,YAP_ARG3);
|
||||
}
|
||||
/*
|
||||
* mpi_ibcast(+Root,+Data).
|
||||
*/
|
||||
static int
|
||||
static YAP_Bool
|
||||
mpi_ibcast2(void) {
|
||||
return my_ibcast(YAP_ARG1,YAP_ARG2,YAP_MkIntTerm(0));
|
||||
}
|
||||
@ -947,7 +950,7 @@ gc(hashtable ht) {
|
||||
|
||||
handle=INT2HANDLE(node->value);
|
||||
MPI_CALL(MPI_Test( handle , &flag, &status ));
|
||||
if ( flag==TRUE) {
|
||||
if ( flag==true) {
|
||||
MPI_CALL(MPI_Wait(handle,&status));
|
||||
#ifdef DEBUG
|
||||
write_msg(__FUNCTION__,__FILE__,__LINE__,"Released handle...%s\n",(char*)node->obj);
|
||||
@ -961,7 +964,7 @@ gc(hashtable ht) {
|
||||
/*
|
||||
*
|
||||
*/
|
||||
static int
|
||||
static YAP_Bool
|
||||
mpi_gc(void) {
|
||||
//write_msg(__FUNCTION__,__FILE__,__LINE__,"MPI_gc>: requests=%d\n",requests->n_entries);
|
||||
CONT_TIMER();
|
||||
@ -971,28 +974,30 @@ mpi_gc(void) {
|
||||
gc(broadcasts);
|
||||
//write_msg(__FUNCTION__,__FILE__,__LINE__,"MPI_gc<: requests=%d\n",requests->n_entries);
|
||||
PAUSE_TIMER();
|
||||
RETURN(TRUE);
|
||||
return true;
|
||||
}
|
||||
|
||||
size_t BLOCK_SIZE=4*1024;
|
||||
|
||||
static int
|
||||
static YAP_Bool
|
||||
mpi_default_buffer_size(void)
|
||||
{
|
||||
YAP_Term t2;
|
||||
intptr_t IBLOCK_SIZE;
|
||||
if (!YAP_Unify(YAP_ARG1,YAP_MkIntTerm(BLOCK_SIZE)))
|
||||
return FALSE;
|
||||
return false;
|
||||
t2 = YAP_ARG2;
|
||||
if (YAP_IsVarTerm(t2))
|
||||
return TRUE;
|
||||
return true;
|
||||
if (!YAP_IsIntTerm(t2))
|
||||
return FALSE;
|
||||
BLOCK_SIZE= YAP_IntOfTerm(t2);
|
||||
if (BLOCK_SIZE < 0) {
|
||||
BLOCK_SIZE=4*1024;
|
||||
return FALSE;
|
||||
return false;
|
||||
IBLOCK_SIZE= YAP_IntOfTerm(t2);
|
||||
if (IBLOCK_SIZE < 0) {
|
||||
IBLOCK_SIZE=4*1024;
|
||||
return false;
|
||||
}
|
||||
return TRUE;
|
||||
BLOCK_SIZE = IBLOCK_SIZE;
|
||||
return true;
|
||||
}
|
||||
|
||||
/********************************************************************
|
||||
@ -1003,7 +1008,7 @@ init_mpi(void) {
|
||||
|
||||
requests=new_hashtable(HASHSIZE);
|
||||
broadcasts=new_hashtable(HASHSIZE);
|
||||
DEL_BUFFER;
|
||||
DEL_BUFFER();
|
||||
YAP_UserCPredicate( "mpi_init", mpi_init,0); // mpi_init/0
|
||||
#ifdef USE_THREADS
|
||||
YAP_UserCPredicate( "mpi_init_rcv_thread", mpi_init_rcv_thread,1); // mpi_init_rcv_thread(+HandleMsgGoal/1)
|
||||
|
@ -53,6 +53,7 @@ macro_log_feature (SQLITE3_FOUND "SQLite3"
|
||||
"http://www.sqlite3.org" FALSE)
|
||||
|
||||
if (ODBC_FOUND OR MYSQL_FOUND OR SQLITE3_FOUND)
|
||||
add_definitions (-DUSE_MYDDAS=1)
|
||||
add_library (myddas SHARED ${MYDDAS_SOURCES})
|
||||
target_link_libraries(myddas libYap)
|
||||
if (ODBC_FOUND)
|
||||
|
@ -48,7 +48,7 @@ MYDDAS_SOURCES= \
|
||||
myddas_mysql.c \
|
||||
myddas_odbc.c \
|
||||
myddas_sqlite3.c \
|
||||
myddas_util.c \
|
||||
myddas_util.c \
|
||||
myddas_initialization.c \
|
||||
myddas_shared.c \
|
||||
myddas_statistics.c \
|
||||
@ -93,8 +93,8 @@ install_myddas:
|
||||
if [ $$count -ne 0 ]; then \
|
||||
mkdir -p $(DESTDIR)$(SHAREDIR); \
|
||||
for p in $(MYDDAS_PROLOG); \
|
||||
do name=`basename $$p .ypp`; echo $$name;\
|
||||
cpp $(YAP_EXTRAS) -P -E -w $$p > $(DESTDIR)$(SHAREDIR)/$$name.yap; \
|
||||
do name=`basename $$p .ypp`; echo $$name;\
|
||||
cpp $(YAP_EXTRAS) -P -E -w $$p > $(DESTDIR)$(SHAREDIR)/$$name.yap; \
|
||||
done; \
|
||||
fi
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* MYDDAS */
|
||||
|
||||
#if defined MYDDAS_MYSQL || defined MYDDAS_ODCB || defined MYDDAS_SQLITE3
|
||||
#ifdef USE_MYDDAS
|
||||
|
||||
/* myddas_initialization.c */
|
||||
MYDDAS_GLOBAL myddas_init_initialize_myddas(void);
|
||||
@ -77,4 +77,3 @@ void Yap_InitBackMYDDAS_SharedPreds(void);
|
||||
#if defined MYDDAS_TOP_LEVEL && defined MYDDAS_MYSQL //&& defined HAVE_LIBREADLINE
|
||||
void Yap_InitMYDDAS_TopLevelPreds(void);
|
||||
#endif
|
||||
|
||||
|
@ -14,8 +14,8 @@ AC_ARG_ENABLE(myddas,
|
||||
else
|
||||
yap_cv_myddas=$withval
|
||||
LDFLAGS="$LDFLAGS -L${yap_cv_myddas}/lib "
|
||||
CPPFLAGS="$CPPFLAGS -I${yap_cv_myddas}/include "
|
||||
MYDDAS_CPPFLAGS="$MYDDAS_CPPFLAGS -I${yap_cv_myddas}/include "
|
||||
CPPFLAGS="$CPPFLAGS -I${yap_cv_myddas}/include "
|
||||
MYDDAS_CPPFLAGS="$MYDDAS_CPPFLAGS -I${yap_cv_myddas}/include "
|
||||
fi,
|
||||
[yap_cv_myddas=/usr])
|
||||
|
||||
@ -28,7 +28,7 @@ AC_ARG_WITH(mysql,
|
||||
else
|
||||
yap_cv_mysql=$withval
|
||||
LDFLAGS="$LDFLAGS -L${yap_cv_mysql}/lib "
|
||||
CPPFLAGS="$CPPFLAGS -I${yap_cv_mysql}/include "
|
||||
CPPFLAGS="$CPPFLAGS -I${yap_cv_mysql}/include "
|
||||
MYDDAS_CPPFLAGS="$MYDDAS_CPPFLAGS -I${yap_cv_mysql}/include "
|
||||
fi,
|
||||
[yap_cv_mysql=/usr])
|
||||
@ -42,7 +42,7 @@ AC_ARG_WITH(odbc,
|
||||
else
|
||||
yap_cv_odbc=$withval
|
||||
LDFLAGS="$LDFLAGS -L${yap_cv_odbc}/lib "
|
||||
CPPFLAGS="$CPPFLAGS -I${yap_cv_odbc}/include "
|
||||
CPPFLAGS="$CPPFLAGS -I${yap_cv_odbc}/include "
|
||||
MYDDAS_CPPFLAGS="$MYDDAS_CPPFLAGS -I${yap_cv_odbc}/include "
|
||||
fi,
|
||||
[yap_cv_odbc=/usr])
|
||||
@ -56,8 +56,8 @@ AC_ARG_WITH(sqlite3,
|
||||
else
|
||||
yap_cv_sqlite3=$withval
|
||||
LDFLAGS="$LDFLAGS -L${yap_cv_sqlite3}/lib "
|
||||
CPPFLAGS="$CPPFLAGS -I${yap_cv_sqlite3}/include "
|
||||
MYDDAS_CPPFLAGS="$MYDDAS_CPPFLAGS -I${yap_cv_sqlite3}/include "
|
||||
CPPFLAGS="$CPPFLAGS -I${yap_cv_sqlite3}/include "
|
||||
MYDDAS_CPPFLAGS="$MYDDAS_CPPFLAGS -I${yap_cv_sqlite3}/include "
|
||||
fi,
|
||||
[yap_cv_sqlite3=/usr])
|
||||
|
||||
@ -83,17 +83,18 @@ then
|
||||
dnl check for mysql
|
||||
AC_SEARCH_LIBS(mysql_init, [mysqlclient], [yap_cv_mysql="yes" MYDDAS_LIBS="-lmysqlclient $MYDDAS_LIBS"], [yap_cv_mysql="no"])
|
||||
AC_CHECK_HEADERS(mysql/mysql.h, [], [yap_cv_mysql="no"])
|
||||
if test "$yap_cv_mysql" = yes
|
||||
if test "$yap_cv_mysql" = yes
|
||||
then
|
||||
YAP_EXTRAS="$YAP_EXTRAS -DMYDDAS_MYSQL"
|
||||
use_myddas=true
|
||||
YAP_EXTRAS="$YAP_EXTRAS -DMYDDAS_MYSQL"
|
||||
fi
|
||||
|
||||
|
||||
dnl check for odbc
|
||||
case "$target_os" in
|
||||
*darwin*)
|
||||
LIBS="$LIBS -framework CoreFoundation"
|
||||
;;
|
||||
**)
|
||||
**)
|
||||
;;
|
||||
esac
|
||||
AC_SEARCH_LIBS(SQLAllocHandle, [odbc], [yap_cv_odbc="yes"], [yap_cv_odbc="no"])
|
||||
@ -116,11 +117,12 @@ then
|
||||
#from SWI ODBC library.
|
||||
AC_CHECK_HEADERS(windef.h)
|
||||
AC_CHECK_HEADERS(sql.h, [yap_cv_odbc="yes" ], [yap_cv_odbc="no"])
|
||||
if test "$yap_cv_odbc" != no
|
||||
if test "$yap_cv_odbc" != no
|
||||
then
|
||||
use_myddas=true
|
||||
YAP_EXTRAS="$YAP_EXTRAS -DMYDDAS_ODBC"
|
||||
fi
|
||||
|
||||
|
||||
#from SWI PROSQLITE library.
|
||||
AC_CHECK_LIB(sqlite3, sqlite3_open,
|
||||
LIBS="-lsqlite3 $LIBS"
|
||||
@ -128,8 +130,9 @@ then
|
||||
|
||||
|
||||
AC_CHECK_HEADERS(sqlite3.h, [], [yap_cv_sqlite3="no"])
|
||||
if test "$yap_cv_sqlite3" != no
|
||||
if test "$yap_cv_sqlite3" != no
|
||||
then
|
||||
use_myddas=true
|
||||
YAP_EXTRAS="$YAP_EXTRAS -DMYDDAS_SQLITE3"
|
||||
fi
|
||||
|
||||
@ -143,15 +146,18 @@ then
|
||||
YAP_EXTRAS="$YAP_EXTRAS -DMYDDAS_TOP_LEVEL"
|
||||
fi
|
||||
|
||||
if test "$use_myddas" = true; then
|
||||
YAP_EXTRAS="$YAP_EXTRAS -DUSE_MYDDAS=1"
|
||||
fi
|
||||
|
||||
|
||||
MYDDAS_LIBS="$LIBS"
|
||||
LIBS="$OLD_LIBS"
|
||||
CPPFLAGS="$OLD_CPPFLAGS"
|
||||
LIBS="$OLD_LIBS"
|
||||
CPPFLAGS="$OLD_CPPFLAGS"
|
||||
else
|
||||
ENABLE_MYDDAS=""
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_SUBST(PKG_MYDDAS)
|
||||
AC_SUBST(MYDDAS_CPPFLAGS)
|
||||
AC_SUBST(MYDDAS_LIBS)
|
||||
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#if defined MYDDAS_ODBC || defined MYDDAS_MYSQL || defined MYDDAS_SQLITE3
|
||||
#ifdef USE_MYDDAS
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
@ -15,13 +15,13 @@
|
||||
MYDDAS_GLOBAL
|
||||
myddas_init_initialize_myddas(void){
|
||||
MYDDAS_GLOBAL global = NULL;
|
||||
|
||||
|
||||
/* We cannot call MYDDAS_MALLOC were because the global
|
||||
register isn't yet initialized */
|
||||
global = (MYDDAS_GLOBAL) malloc (sizeof(struct myddas_global));
|
||||
#ifdef DEBUG
|
||||
printf ("MALLOC %p %s %d\n",global,__FILE__,__LINE__);
|
||||
#endif
|
||||
#endif
|
||||
global->myddas_top_connections = NULL;
|
||||
#ifdef MYDDAS_TOP_LEVEL
|
||||
global->myddas_top_level_connection = NULL;
|
||||
@ -30,7 +30,7 @@ myddas_init_initialize_myddas(void){
|
||||
global->myddas_statistics = (MYDDAS_GLOBAL_STATS) malloc (sizeof(struct myddas_global_stats));
|
||||
#ifdef DEBUG
|
||||
printf ("MALLOC %p %s %d\n",global->myddas_statistics,__FILE__,__LINE__);
|
||||
#endif
|
||||
#endif
|
||||
global->myddas_statistics->stats = NULL;
|
||||
#endif
|
||||
|
||||
@ -46,18 +46,18 @@ myddas_init_initialize_myddas(void){
|
||||
global->free_called = 0;
|
||||
global->memory_freed = 0;
|
||||
#endif
|
||||
|
||||
|
||||
return global;
|
||||
}
|
||||
|
||||
/* Inserts the new node on the front of the list */
|
||||
MYDDAS_UTIL_CONNECTION
|
||||
MYDDAS_UTIL_CONNECTION
|
||||
myddas_init_initialize_connection(void *conn,void *enviromment,
|
||||
MYDDAS_UTIL_CONNECTION next){
|
||||
CACHE_REGS
|
||||
MYDDAS_UTIL_CONNECTION new = NULL;
|
||||
MYDDAS_MALLOC(new,struct myddas_list_connection);
|
||||
|
||||
|
||||
if (new == NULL)
|
||||
{
|
||||
return NULL;
|
||||
@ -74,11 +74,11 @@ myddas_init_initialize_connection(void *conn,void *enviromment,
|
||||
/* List integrity */
|
||||
new->next=next;
|
||||
new->previous=NULL;
|
||||
/* If there's already at least one node
|
||||
/* If there's already at least one node
|
||||
on the list */
|
||||
if (next != NULL)
|
||||
next->previous=new;
|
||||
|
||||
|
||||
#ifdef MYDDAS_STATS
|
||||
new->stats = NULL;
|
||||
new->stats = myddas_stats_initialize_connection_stats();
|
||||
@ -86,30 +86,30 @@ myddas_init_initialize_connection(void *conn,void *enviromment,
|
||||
return new;
|
||||
}
|
||||
|
||||
MYDDAS_UTIL_PREDICATE
|
||||
MYDDAS_UTIL_PREDICATE
|
||||
myddas_init_initialize_predicate(char *pred_name, int pred_arity,
|
||||
char *pred_module, MYDDAS_UTIL_PREDICATE next){
|
||||
CACHE_REGS
|
||||
MYDDAS_UTIL_PREDICATE new = NULL;
|
||||
MYDDAS_MALLOC(new,struct myddas_list_preds);
|
||||
|
||||
if (new == NULL)
|
||||
|
||||
if (new == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
new->pred_name=pred_name;
|
||||
new->pred_arity=pred_arity;
|
||||
new->pred_module=pred_module;
|
||||
|
||||
|
||||
/* List integrity */
|
||||
new->next=next;
|
||||
new->previous=NULL;
|
||||
/* If there's already at least one node
|
||||
/* If there's already at least one node
|
||||
on the list */
|
||||
if (next != NULL)
|
||||
next->previous=new;
|
||||
|
||||
|
||||
return new;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
@ -15,7 +15,7 @@
|
||||
* *
|
||||
*************************************************************************/
|
||||
|
||||
#if defined MYDDAS_MYSQL || defined MYDDAS_ODBC
|
||||
#ifdef USE_MYDDAS
|
||||
|
||||
#include "Yap.h"
|
||||
#include "Yatom.h"
|
||||
@ -44,7 +44,7 @@ static Int c_db_stats( USES_REGS1 );
|
||||
static Int c_db_stats_walltime( USES_REGS1 );
|
||||
static Int c_db_stats_translate( USES_REGS1 );
|
||||
static Int c_db_stats_time( USES_REGS1 );
|
||||
#endif
|
||||
#endif
|
||||
#ifdef DEBUG
|
||||
static Int c_db_check( USES_REGS1 );
|
||||
#endif
|
||||
@ -53,7 +53,7 @@ void Yap_InitMYDDAS_SharedPreds(void)
|
||||
{
|
||||
/* c_db_initialize_myddas */
|
||||
Yap_InitCPred("c_db_initialize_myddas",0,c_db_initialize_myddas, 0);
|
||||
|
||||
|
||||
/* c_db_connection_type: Connection x Type */
|
||||
Yap_InitCPred("c_db_connection_type",2,c_db_connection_type, 0);
|
||||
|
||||
@ -62,7 +62,7 @@ void Yap_InitMYDDAS_SharedPreds(void)
|
||||
|
||||
/* c_db_check_if_exists_pred : PredName * Arity * Connection */
|
||||
Yap_InitCPred("c_db_check_if_exists_pred",3,c_db_check_if_exists_pred, 0);
|
||||
|
||||
|
||||
/* c_db_delete_pred : Module * PredName * Arity */
|
||||
Yap_InitCPred("c_db_delete_predicate",3,c_db_delete_predicate, 0);
|
||||
|
||||
@ -92,20 +92,20 @@ void Yap_InitBackMYDDAS_SharedPreds(void)
|
||||
{
|
||||
/* Gives all the predicates associated to a given connection */
|
||||
Yap_InitCPredBack("c_db_preds_conn", 4, sizeof(Int),
|
||||
c_db_preds_conn_start,
|
||||
c_db_preds_conn_start,
|
||||
c_db_preds_conn_continue, 0);
|
||||
/* Gives all the connections stored on the MYDDAS Structure*/
|
||||
Yap_InitCPredBack("c_db_connection", 1, sizeof(Int),
|
||||
c_db_connection_start,
|
||||
c_db_connection_continue, 0);
|
||||
|
||||
c_db_connection_start,
|
||||
c_db_connection_continue, 0);
|
||||
|
||||
|
||||
}
|
||||
|
||||
/* Initialize all of the MYDDAS global structures */
|
||||
static Int
|
||||
static Int
|
||||
c_db_initialize_myddas( USES_REGS1 ){
|
||||
Yap_REGS.MYDDAS_GLOBAL_POINTER = myddas_init_initialize_myddas();
|
||||
Yap_REGS.MYDDAS_GLOBAL_POINTER = myddas_init_initialize_myddas();
|
||||
#ifdef MYDDAS_STATS
|
||||
Yap_REGS.MYDDAS_GLOBAL_POINTER = myddas_stats_initialize_global_stats(Yap_REGS.MYDDAS_GLOBAL_POINTER);
|
||||
#endif /* MYDDAS_STATS */
|
||||
@ -113,40 +113,40 @@ c_db_initialize_myddas( USES_REGS1 ){
|
||||
}
|
||||
|
||||
|
||||
/* Gives the type of a given connection,
|
||||
in other words, type will be mysql or odbc
|
||||
|
||||
/* Gives the type of a given connection,
|
||||
in other words, type will be mysql or odbc
|
||||
|
||||
NOTE: In order to use this predicate, the connection*/
|
||||
/* c_db_connection_type: +Connection * ?Type */
|
||||
static Int
|
||||
static Int
|
||||
c_db_connection_type ( USES_REGS1 ){
|
||||
Term arg_con = Deref(ARG1);
|
||||
Term arg_type = Deref(ARG2);
|
||||
|
||||
|
||||
Int *con = (Int *) IntegerOfTerm(arg_con);
|
||||
Int type = myddas_util_connection_type(con);
|
||||
|
||||
|
||||
if (type == 1) /* MYSQL Connection */
|
||||
Yap_unify(arg_type, MkAtomTerm(Yap_LookupAtom("mysql")));
|
||||
else if (type ==2) /* ODBC Connection */
|
||||
Yap_unify(arg_type, MkAtomTerm(Yap_LookupAtom("odbc")));
|
||||
else /* Not a valid connection*/
|
||||
return FALSE;
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* db_add_preds: PredName * Arity * Module * Connection*/
|
||||
static Int
|
||||
static Int
|
||||
c_db_add_preds ( USES_REGS1 ){
|
||||
Term arg_nome = Deref(ARG1);
|
||||
Term arg_aridade = Deref(ARG2);
|
||||
Term arg_module = Deref(ARG3);
|
||||
Term arg_conn = Deref(ARG4);
|
||||
|
||||
|
||||
/* PredEntry *pe; */
|
||||
/* pe = RepPredProp(PredPropByFunc(FunctorOfTerm(arg_pred),arg_module)); */
|
||||
|
||||
|
||||
|
||||
char *nome = AtomName(AtomOfTerm(arg_nome));
|
||||
char *module = AtomName(AtomOfTerm(arg_module));
|
||||
@ -160,22 +160,22 @@ c_db_add_preds ( USES_REGS1 ){
|
||||
#endif
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static Int
|
||||
static Int
|
||||
c_db_check_if_exists_pred ( USES_REGS1 ){
|
||||
Term arg_nome = Deref(ARG1);
|
||||
Term arg_aridade = Deref(ARG2);
|
||||
Term arg_module = Deref(ARG3);
|
||||
|
||||
|
||||
|
||||
|
||||
char *nome = AtomName(AtomOfTerm(arg_nome));
|
||||
char *module = AtomName(AtomOfTerm(arg_module));
|
||||
Int aridade = IntegerOfTerm(arg_aridade);
|
||||
|
||||
|
||||
if (myddas_util_search_predicate(nome,aridade,module) == NULL)
|
||||
return FALSE;
|
||||
else
|
||||
@ -183,17 +183,17 @@ c_db_check_if_exists_pred ( USES_REGS1 ){
|
||||
}
|
||||
|
||||
|
||||
static Int
|
||||
static Int
|
||||
c_db_delete_predicate( USES_REGS1 ){
|
||||
Term arg_module = Deref(ARG1);
|
||||
Term arg_name = Deref(ARG2);
|
||||
Term arg_arity = Deref(ARG3);
|
||||
|
||||
|
||||
char *module = AtomName(AtomOfTerm(arg_module));
|
||||
char *name = AtomName(AtomOfTerm(arg_name));
|
||||
Int arity = IntegerOfTerm(arg_arity);
|
||||
|
||||
MYDDAS_UTIL_PREDICATE predicate =
|
||||
MYDDAS_UTIL_PREDICATE predicate =
|
||||
myddas_util_search_predicate(name,arity,module);
|
||||
if (predicate == NULL)
|
||||
return FALSE;
|
||||
@ -204,29 +204,29 @@ c_db_delete_predicate( USES_REGS1 ){
|
||||
}
|
||||
|
||||
|
||||
static Int
|
||||
static Int
|
||||
c_db_multi_queries_number( USES_REGS1 ){
|
||||
Term arg_conn = Deref(ARG1);
|
||||
Term arg_number = Deref(ARG2);
|
||||
|
||||
Int *conn = (Int *) IntegerOfTerm(arg_conn);
|
||||
MYDDAS_UTIL_CONNECTION node =
|
||||
MYDDAS_UTIL_CONNECTION node =
|
||||
myddas_util_search_connection(conn);
|
||||
|
||||
|
||||
if (node == NULL)
|
||||
return FALSE;
|
||||
|
||||
if (IsVarTerm(arg_number)){
|
||||
Yap_unify(arg_number,MkIntegerTerm(((Int)myddas_util_get_total_multi_queries_number(node))+1));
|
||||
}
|
||||
}
|
||||
else {
|
||||
Int number = IntegerOfTerm(arg_number);
|
||||
number--;
|
||||
myddas_util_set_total_multi_queries_number(node,number);
|
||||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
|
||||
|
||||
}
|
||||
|
||||
static Int
|
||||
@ -236,17 +236,17 @@ c_db_connection_start( USES_REGS1 ){
|
||||
Yap_REGS.MYDDAS_GLOBAL_POINTER->myddas_top_connections;
|
||||
|
||||
EXTRA_CBACK_ARG(1,1)=(CELL) MkIntegerTerm((Int)node);
|
||||
|
||||
|
||||
return (c_db_connection_continue( PASS_REGS1 ));
|
||||
}
|
||||
|
||||
static Int
|
||||
c_db_connection_continue( USES_REGS1 ){
|
||||
Term arg_conn = Deref(ARG1);
|
||||
|
||||
|
||||
MYDDAS_UTIL_CONNECTION node;
|
||||
node = (MYDDAS_UTIL_CONNECTION) IntegerOfTerm(EXTRA_CBACK_ARG(1,1));
|
||||
|
||||
|
||||
/* There is no connections */
|
||||
if (node == NULL)
|
||||
{
|
||||
@ -256,35 +256,35 @@ c_db_connection_continue( USES_REGS1 ){
|
||||
|
||||
Yap_unify(arg_conn, MkIntegerTerm((Int)(node->connection)));
|
||||
EXTRA_CBACK_ARG(1,1)=(CELL) MkIntegerTerm((Int)(node->next));
|
||||
|
||||
|
||||
return TRUE;
|
||||
|
||||
|
||||
}
|
||||
|
||||
/* db_preds_conn : Connection(+) * Pred_name(-) * Pred_arity */
|
||||
static Int
|
||||
c_db_preds_conn_start ( USES_REGS1 ){
|
||||
Term arg_conn = Deref(ARG1);
|
||||
|
||||
|
||||
Int *conn = (Int *) IntegerOfTerm(arg_conn);
|
||||
MYDDAS_UTIL_CONNECTION node =
|
||||
MYDDAS_UTIL_CONNECTION node =
|
||||
myddas_util_search_connection(conn);
|
||||
|
||||
|
||||
/* Caso a ligacao já tenha sido apagada*/
|
||||
if (node == NULL)
|
||||
{
|
||||
cut_fail();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
void *pointer = myddas_util_get_list_pred(node);
|
||||
EXTRA_CBACK_ARG(4,1)=(CELL) MkIntegerTerm((Int)pointer);
|
||||
|
||||
|
||||
return (c_db_preds_conn_continue( PASS_REGS1 ));
|
||||
}
|
||||
|
||||
/* db_preds_conn : Connection(+) * Pred_name(-) * Pred_arity*/
|
||||
static Int
|
||||
static Int
|
||||
c_db_preds_conn_continue ( USES_REGS1 ){
|
||||
Term module = Deref(ARG2);
|
||||
Term name = Deref(ARG3);
|
||||
@ -292,11 +292,11 @@ c_db_preds_conn_continue ( USES_REGS1 ){
|
||||
|
||||
void *pointer;
|
||||
pointer = (void *) IntegerOfTerm(EXTRA_CBACK_ARG(4,1));
|
||||
|
||||
|
||||
if (pointer != NULL)
|
||||
{
|
||||
EXTRA_CBACK_ARG(4,1)=(CELL) MkIntegerTerm((Int)myddas_util_get_pred_next(pointer));
|
||||
|
||||
|
||||
if (!Yap_unify(module, MkAtomTerm(Yap_LookupAtom(myddas_util_get_pred_module(pointer))))){
|
||||
return FALSE;
|
||||
}
|
||||
@ -318,7 +318,7 @@ c_db_preds_conn_continue ( USES_REGS1 ){
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
static Int
|
||||
static Int
|
||||
c_db_check( USES_REGS1 ){
|
||||
check_int();
|
||||
return TRUE;
|
||||
@ -352,7 +352,7 @@ c_db_stats_translate( USES_REGS1 ){
|
||||
|
||||
MYDDAS_STATS_TIME start;
|
||||
MYDDAS_STATS_TIME end;
|
||||
|
||||
|
||||
MYDDAS_STATS_TIME total_time,diff;
|
||||
|
||||
#ifdef DEBUG
|
||||
@ -363,20 +363,20 @@ c_db_stats_translate( USES_REGS1 ){
|
||||
end = (MYDDAS_STATS_TIME) IntegerOfTerm(arg_end);
|
||||
|
||||
MYDDAS_STATS_GET_TRANSLATE(total_time);
|
||||
|
||||
|
||||
MYDDAS_STATS_INITIALIZE_TIME_STRUCT(diff,time_copy);
|
||||
myddas_stats_subtract_time(diff,end,start);
|
||||
|
||||
|
||||
diff = myddas_stats_time_copy_to_final(diff);
|
||||
myddas_stats_add_time(total_time,diff,total_time);
|
||||
MyddasULInt count;
|
||||
MYDDAS_STATS_GET_TRANSLATE_COUNT(count);
|
||||
MYDDAS_STATS_SET_TRANSLATE_COUNT(++count);
|
||||
|
||||
|
||||
MYDDAS_FREE(diff,struct myddas_stats_time_struct);
|
||||
MYDDAS_FREE(start, struct myddas_stats_time_struct);
|
||||
MYDDAS_FREE(end, struct myddas_stats_time_struct);
|
||||
|
||||
|
||||
return TRUE;
|
||||
#ifdef DEBUG
|
||||
}
|
||||
@ -391,9 +391,9 @@ static Int
|
||||
c_db_stats_time( USES_REGS1 ){
|
||||
Term arg_reference = Deref(ARG1);
|
||||
Term arg_time = Deref(ARG2);
|
||||
|
||||
|
||||
Term final_term;
|
||||
|
||||
|
||||
MYDDAS_STATS_STRUCT struc = (MYDDAS_STATS_STRUCT)IntegerOfTerm(arg_reference);
|
||||
Functor functor_count = Yap_MkFunctor(Yap_LookupAtom("count"),1);
|
||||
Term count_number[1];
|
||||
@ -401,7 +401,7 @@ c_db_stats_time( USES_REGS1 ){
|
||||
Term number[1];
|
||||
|
||||
switch(struc->type){
|
||||
|
||||
|
||||
case integer:
|
||||
{
|
||||
Functor functor = Yap_MkFunctor(Yap_LookupAtom("myddas_integer"),2);
|
||||
@ -412,26 +412,26 @@ c_db_stats_time( USES_REGS1 ){
|
||||
integer = struc->u.integer.integer;
|
||||
number[0] = MkIntegerTerm(integer);
|
||||
integer_number[0] = Yap_MkApplTerm(unit,1,number);;
|
||||
|
||||
|
||||
count_number[0] = MkIntegerTerm(struc->count);
|
||||
integer_number[1] = Yap_MkApplTerm(functor_count,1,count_number);
|
||||
final_term = Yap_MkApplTerm(functor,2,integer_number);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
case time_str:
|
||||
{
|
||||
MYDDAS_STATS_TIME time = struc->u.time_str.time_str;
|
||||
|
||||
|
||||
Functor functor = Yap_MkFunctor(Yap_LookupAtom("myddas_time"),6);
|
||||
Term time_numbers[6];
|
||||
MyddasUInt time_number;
|
||||
|
||||
|
||||
unit = Yap_MkFunctor(Yap_LookupAtom("hours"),1);
|
||||
time_number = MYDDAS_STATS_TIME_HOURS(time);
|
||||
number[0] = MkIntegerTerm(time_number);
|
||||
time_numbers[0] = Yap_MkApplTerm(unit,1,number);;
|
||||
|
||||
|
||||
unit = Yap_MkFunctor(Yap_LookupAtom("minutes"),1);
|
||||
time_number = MYDDAS_STATS_TIME_MINUTES(time);
|
||||
number[0] = MkIntegerTerm(time_number);
|
||||
@ -441,23 +441,23 @@ c_db_stats_time( USES_REGS1 ){
|
||||
time_number = MYDDAS_STATS_TIME_SECONDS(time);
|
||||
number[0] = MkIntegerTerm(time_number);
|
||||
time_numbers[2] = Yap_MkApplTerm(unit,1,number);;
|
||||
|
||||
|
||||
unit = Yap_MkFunctor(Yap_LookupAtom("miliseconds"),1);
|
||||
time_number = MYDDAS_STATS_TIME_MILISECONDS(time);
|
||||
number[0] = MkIntegerTerm(time_number);
|
||||
time_numbers[3] = Yap_MkApplTerm(unit,1,number);;
|
||||
|
||||
|
||||
unit = Yap_MkFunctor(Yap_LookupAtom("microseconds"),1);
|
||||
time_number = MYDDAS_STATS_TIME_MICROSECONDS(time);
|
||||
time_number = MYDDAS_STATS_TIME_MICROSECONDS(time);
|
||||
number[0] = MkIntegerTerm(time_number);
|
||||
time_numbers[4] = Yap_MkApplTerm(unit,1,number);;
|
||||
|
||||
|
||||
count_number[0] = MkIntegerTerm(struc->count);
|
||||
time_numbers[5] = Yap_MkApplTerm(functor_count,1,count_number);
|
||||
final_term = Yap_MkApplTerm(functor,6,time_numbers);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
default:
|
||||
#ifdef DEBUG
|
||||
printf ("ERROR: c_db_stats_time unknow option\n");
|
||||
@ -465,7 +465,7 @@ c_db_stats_time( USES_REGS1 ){
|
||||
return FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
if (!Yap_unify(arg_time,final_term )){
|
||||
return FALSE;
|
||||
}
|
||||
@ -474,20 +474,20 @@ c_db_stats_time( USES_REGS1 ){
|
||||
}
|
||||
|
||||
//Returns the stats of this module in a list
|
||||
static Int
|
||||
static Int
|
||||
c_db_stats( USES_REGS1 ) {
|
||||
Term arg_conn = Deref(ARG1);
|
||||
Term arg_list = Deref(ARG2);
|
||||
|
||||
|
||||
MyddasPointer *conn = (MyddasPointer *) (IntegerOfTerm(arg_conn));
|
||||
|
||||
|
||||
// TODO
|
||||
if (get_myddas_top() == 0 ){ /* We want all the statistics */
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
MYDDAS_STATS_STRUCT str;
|
||||
MYDDAS_UTIL_CONNECTION
|
||||
MYDDAS_UTIL_CONNECTION
|
||||
node = myddas_util_search_connection(conn);
|
||||
Term head, list;
|
||||
list = arg_list;
|
||||
@ -514,7 +514,7 @@ c_db_stats( USES_REGS1 ) {
|
||||
// processing all the SQL Querys
|
||||
head = HeadOfTerm(list);
|
||||
list = TailOfTerm(list);
|
||||
|
||||
|
||||
str = myddas_stats_get_stat(node->stats,1);
|
||||
Yap_unify(head, MkIntegerTerm((MyddasInt)str));
|
||||
#ifdef DEBUG
|
||||
@ -522,13 +522,13 @@ c_db_stats( USES_REGS1 ) {
|
||||
printf ("Reference to time Spent by the Server, on all the SQL Querys\n");
|
||||
MYDDAS_STATS_PRINT_TIME_STRUCT(time);
|
||||
printf ("\n\n");
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//[Index 3] -> Total of Time Spent by the DB Server
|
||||
// processing a the last SQL Query
|
||||
head = HeadOfTerm(list);
|
||||
list = TailOfTerm(list);
|
||||
|
||||
|
||||
str = myddas_stats_get_stat(node->stats,2);
|
||||
Yap_unify(head, MkIntegerTerm((MyddasInt)str));
|
||||
#ifdef DEBUG
|
||||
@ -537,12 +537,12 @@ c_db_stats( USES_REGS1 ) {
|
||||
MYDDAS_STATS_PRINT_TIME_STRUCT(time);
|
||||
printf ("\n\n");
|
||||
#endif
|
||||
|
||||
|
||||
//[Index 4] -> Total of Time Spent by the DB Server
|
||||
// transfering all the results of the SQL Querys
|
||||
head = HeadOfTerm(list);
|
||||
list = TailOfTerm(list);
|
||||
|
||||
|
||||
str = myddas_stats_get_stat(node->stats,3);
|
||||
Yap_unify(head, MkIntegerTerm((MyddasInt)str));
|
||||
#ifdef DEBUG
|
||||
@ -551,12 +551,12 @@ c_db_stats( USES_REGS1 ) {
|
||||
MYDDAS_STATS_PRINT_TIME_STRUCT(time);
|
||||
printf ("\n\n");
|
||||
#endif
|
||||
|
||||
|
||||
//[Index 5] -> Total of Time Spent by the DB Server
|
||||
// transfering the result of the last SQL Query
|
||||
head = HeadOfTerm(list);
|
||||
list = TailOfTerm(list);
|
||||
|
||||
|
||||
str = myddas_stats_get_stat(node->stats,4);
|
||||
Yap_unify(head, MkIntegerTerm((MyddasInt)str));
|
||||
#ifdef DEBUG
|
||||
@ -565,14 +565,14 @@ c_db_stats( USES_REGS1 ) {
|
||||
MYDDAS_STATS_PRINT_TIME_STRUCT(time);
|
||||
printf ("\n\n");
|
||||
#endif
|
||||
|
||||
//[Index 6] -> Total of Time Spent by the
|
||||
|
||||
//[Index 6] -> Total of Time Spent by the
|
||||
// db_row_function
|
||||
head = HeadOfTerm(list);
|
||||
list = TailOfTerm(list);
|
||||
|
||||
|
||||
str = myddas_stats_get_stat(Yap_REGS.MYDDAS_GLOBAL_POINTER->myddas_statistics->stats,1);
|
||||
|
||||
|
||||
Yap_unify(head, MkIntegerTerm((MyddasInt)str));
|
||||
#ifdef DEBUG
|
||||
MYDDAS_STATS_GET_DB_ROW_FUNCTION(time);
|
||||
@ -580,8 +580,8 @@ c_db_stats( USES_REGS1 ) {
|
||||
MYDDAS_STATS_PRINT_TIME_STRUCT(time);
|
||||
printf ("\n\n");
|
||||
#endif
|
||||
|
||||
//[Index 7] -> Total of Bytes Transfered by the
|
||||
|
||||
//[Index 7] -> Total of Bytes Transfered by the
|
||||
// DB Server on all SQL Querys
|
||||
head = HeadOfTerm(list);
|
||||
list = TailOfTerm(list);
|
||||
@ -593,12 +593,12 @@ c_db_stats( USES_REGS1 ) {
|
||||
printf ("Bytes Transfered by the DB Server from all querys\n");
|
||||
printf ("%llu\n\n",(MyddasULInt)number);
|
||||
#endif
|
||||
|
||||
//[Index 8] -> Total of Bytes Transfered by the
|
||||
|
||||
//[Index 8] -> Total of Bytes Transfered by the
|
||||
// DB Server on the last SQL Query
|
||||
head = HeadOfTerm(list);
|
||||
list = TailOfTerm(list);
|
||||
|
||||
|
||||
str = myddas_stats_get_stat(node->stats,7);
|
||||
Yap_unify(head, MkIntegerTerm((MyddasPointer)str));
|
||||
#ifdef DEBUG
|
||||
@ -618,7 +618,7 @@ c_db_stats( USES_REGS1 ) {
|
||||
printf ("%llu\n\n",(MyddasULInt)number);
|
||||
#endif
|
||||
|
||||
//[Index 10] -> Total of Time Spent by the
|
||||
//[Index 10] -> Total of Time Spent by the
|
||||
// translate predicate
|
||||
head = HeadOfTerm(list);
|
||||
list = TailOfTerm(list);
|
||||
@ -640,13 +640,13 @@ c_db_stats( USES_REGS1 ) {
|
||||
printf ("Number of times malloc was called in MYDDAS: %lu \n",nr);
|
||||
MYDDAS_MEMORY_FREE_NR(nr);
|
||||
printf ("Number of times free was called in MYDDAS : %lu \n",nr);
|
||||
|
||||
|
||||
MYDDAS_MEMORY_MALLOC_SIZE(nr);
|
||||
printf ("Total memory allocated in MYDDAS: %lu \n",nr);
|
||||
MYDDAS_MEMORY_FREE_SIZE(nr);
|
||||
printf ("Total memory freed in MYDDAS : %lu \n",nr);
|
||||
#endif
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -660,7 +660,7 @@ void Yap_MYDDAS_delete_all_myddas_structs(void)
|
||||
CACHE_REGS
|
||||
|
||||
/* NAO ESQUECER DE FAZER ISTO TB PARA O DB_CLOSE*/
|
||||
MYDDAS_GLOBAL global =
|
||||
MYDDAS_GLOBAL global =
|
||||
Yap_REGS.MYDDAS_GLOBAL_POINTER;
|
||||
|
||||
/* In case that the MYDDAS module isn't loaded */
|
||||
@ -669,11 +669,11 @@ void Yap_MYDDAS_delete_all_myddas_structs(void)
|
||||
|
||||
MYDDAS_UTIL_CONNECTION connections =
|
||||
global->myddas_top_connections;
|
||||
|
||||
|
||||
/* Delete all connections */
|
||||
for(;connections!=NULL;connections=connections->next)
|
||||
myddas_util_delete_connection(connections->connection);
|
||||
|
||||
|
||||
#ifdef MYDDAS_STATS
|
||||
myddas_stats_delete_stats_list(global->myddas_statistics->stats);
|
||||
MYDDAS_FREE(global->myddas_statistics,struct myddas_global_stats);
|
||||
@ -687,13 +687,13 @@ void Yap_MYDDAS_delete_all_myddas_structs(void)
|
||||
printf ("Number of times malloc was called in MYDDAS: " UInt_FORMAT " \n",(UInt)nr);
|
||||
MYDDAS_MEMORY_FREE_NR(nr);
|
||||
printf ("Number of times free was called in MYDDAS : " UInt_FORMAT " \n",(UInt)nr);
|
||||
|
||||
|
||||
MYDDAS_MEMORY_MALLOC_SIZE(nr);
|
||||
printf ("Total memory allocated in MYDDAS: " UInt_FORMAT " \n",(UInt)nr);
|
||||
MYDDAS_MEMORY_FREE_SIZE(nr);
|
||||
printf ("Total memory freed in MYDDAS : " UInt_FORMAT " \n",(UInt)nr);
|
||||
#endif
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -731,11 +731,11 @@ init_myddas(void)
|
||||
#ifdef MYDDAS_MYSQL_INIT
|
||||
if (yap_init->myddas) {
|
||||
Yap_PutValue(AtomMyddasGoal,MkIntegerTerm(yap_init->myddas));
|
||||
|
||||
|
||||
/* Mandatory Fields */
|
||||
Yap_PutValue(AtomMyddasUser,MkAtomTerm(Yap_LookupAtom(yap_init->myddas_user)));
|
||||
Yap_PutValue(AtomMyddasDB,MkAtomTerm(Yap_LookupAtom(yap_init->myddas_db)));
|
||||
|
||||
|
||||
/* Non-Mandatory Fields */
|
||||
if (yap_init->myddas_pass != NULL)
|
||||
Yap_PutValue(AtomMyddasPass,MkAtomTerm(Yap_LookupAtom(yap_init->myddas_pass)));
|
||||
@ -762,7 +762,7 @@ int WINAPI PROTO(win_myddas, (HANDLE, DWORD, LPVOID));
|
||||
|
||||
int WINAPI win_myddas(HANDLE hinst, DWORD reason, LPVOID reserved)
|
||||
{
|
||||
switch (reason)
|
||||
switch (reason)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
break;
|
||||
|
Reference in New Issue
Block a user