[Ecls-list] Latest changes (and thread related topic)

Matthew Mondor mm_lists at pulsar-zone.net
Sat Aug 29 03:59:59 UTC 2009


On Fri, 28 Aug 2009 22:44:05 +0200
Juan Jose Garcia-Ripoll <juanjose.garciaripoll at googlemail.com> wrote:

>  - The internal functions dealing with bignums have been renamed with the usual
>    prefix "_ecl", and some of them have been turned into macros. Do not use
>    those functions if possible.
> 
>  - A new compiler macro ECL_NO_LEGACY can be defined to remove all deprecated
>    macros and functions. Have a look at the end of src/h/external.h to see
>    what functions are deprecated on each release -- typically they are functions
>    that have been renamed with one of the prefixes, ecl_, cl_, si_,
> ext_ or _ecl.

I couldn't check further if these changes are responsible yet, but
today's ECL CVS HEAD failed to build here:

if test -f ../CROSS-DPP ; then ../CROSS-DPP /home/mmondor/work/ecl-cvs/src/c/cinit.d cinit.c ; else ./dpp /home/mmondor/work/ecl-cvs/src/c/cinit.d cinit.c ; fi
dpp: /home/mmondor/work/ecl-cvs/src/c/cinit.d -> cinit.c
gcc -I. -I/home/mmondor/work/ecl-cvs/build -I/home/mmondor/work/ecl-cvs/src/c -I../ecl/gc -DECL_API -DECL_NO_LEGACY  -g -O2 -fPIC   -Dnetbsd -c -I./ cinit.c -o ../cinit.o
if [ -f CROSS-COMPILER ]; then  touch ecl_min;  else  gcc  -o ecl_min cinit.o c/all_symbols.o -L./ libeclmin.a -leclgmp -leclgc  -lpthread   -lm; fi
libeclmin.a(instance.o): In function `ecl_slot_value_set':
/home/mmondor/work/ecl-cvs/src/c/instance.d:210: undefined reference to `c_string_to_object'
/home/mmondor/work/ecl-cvs/src/c/instance.d:211: undefined reference to `c_string_to_object'
libeclmin.a(instance.o): In function `ecl_slot_value':
/home/mmondor/work/ecl-cvs/src/c/instance.d:203: undefined reference to `c_string_to_object'
libeclmin.a(character.o): In function `cl_character':
/home/mmondor/work/ecl-cvs/src/c/character.d:353: undefined reference to `c_string_to_object'
libeclmin.a(typespec.o): In function `FEtype_error_proper_list':
/home/mmondor/work/ecl-cvs/src/c/typespec.d:57: undefined reference to `c_string_to_object'
libeclmin.a(num_rand.o):/home/mmondor/work/ecl-cvs/src/c/num_rand.d:164: more undefined references to `c_string_to_object' follow
*** Error code 1

Stop.
make: stopped in /home/mmondor/work/ecl-cvs/build
*** Error code 1

Stop.
make: stopped in /home/mmondor/work/ecl-cvs


That put aside, the reason I updated the code and was recompiling it
was because of thread related issues (notably, mp:process-kill seemed
not to work).  I noticed the following fix might be necessary:

Index: ./src/c/threads.d
===================================================================
RCS file: /cvsroot/ecls/ecl/src/c/threads.d,v
retrieving revision 1.42
diff -u -p -r1.42 threads.d
--- ./src/c/threads.d   28 Aug 2009 20:35:00 -0000      1.42
+++ ./src/c/threads.d   29 Aug 2009 03:57:31 -0000
@@ -338,7 +338,7 @@ mp_process_enable(cl_object process)
                FEerror("Cannot enable the running process ~A.", 1, process);
         process->process.parent = mp_current_process();
        code = pthread_create(&process->process.thread, &pthreadattr, thread_entry_point, process);
-       output = (process->process.thread = code)? Cnil : process;
+       output = (code != 0 ? Cnil : process);
 #endif
        @(return output)
 }

Does this also make sense to you?  It seems that process.thread is used
as the pthread_t passed to pthread_kill(3).  process_create(3) returns
0 on success or an error code, and it appears that pthread.thread
was dereferenced to 0 in this case.  I can't confirm this works for me
as I'd have to first look into the build breakage, I might be able to
work further on it this weekend.

Thanks,
-- 
Matt




More information about the ecl-devel mailing list