[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Fix for ra_local on Darwin, and unkillable processes?

From: Justin Erenkrantz <jerenkrantz_at_apache.org>
Date: 2002-06-24 10:56:04 CEST

Note that this commit to APR allows SVN on Darwin (aka OS X) to
not fatally complain about not having ra_local as a shared library.
If you still have problems, please drop me a line.

Also, has anyone seen SVN on Darwin enter an unkillable state (ps
lists its state as U, if that helps)? If my network connection
times out while I'm updating my SVN repos, the entire SVN process
hangs and I can't kill it with anything ('kill -9' is impotent).
I can't attach to it with gdb either. And, I have to do an
unclean shutdown (hold the power button).

I'm chalking this up to an OS bug, but it'd be nice to know if
anyone can reproduce this. It's a royal PITA. -- justin

attached mail follows:


jerenkrantz 2002/06/24 00:01:19

  Modified: . CHANGES
               dso/unix dso.c
               test Makefile.in testdso.c
  Log:
  Correct shared library support on Darwin to not fatally error out when
  a shared library does not exist.
  
  This does retain the Mach-O bundle and Mach-O dynamically linked shared
  library support on Darwin.
  
  Also improvements relating to testdso:
  - Get testdso to actually link.
  - Add support for a second DSO to load in testdso.
  - Build mod_test.slo and libmod_test.slo with and without the -module
    option. This checks that both types of dynamic libraries can be
    loaded.
  
  Revision Changes Path
  1.298 +3 -0 apr/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /home/cvs/apr/CHANGES,v
  retrieving revision 1.297
  retrieving revision 1.298
  diff -u -r1.297 -r1.298
  --- CHANGES 22 Jun 2002 08:06:48 -0000 1.297
  +++ CHANGES 24 Jun 2002 07:01:18 -0000 1.298
  @@ -1,5 +1,8 @@
   Changes with APR b1
   
  + *) Correct shared library support on Darwin to not fatally error out
  + when a shared library does not exist. [Justin Erenkrantz]
  +
     *) Added optimized atomic CAS support for Linux/x86 (available only
        when APR is configured with --enable-nonportable-atomics=yes)
        [Brian Pane]
  
  
  
  1.55 +7 -2 apr/dso/unix/dso.c
  
  Index: dso.c
  ===================================================================
  RCS file: /home/cvs/apr/dso/unix/dso.c,v
  retrieving revision 1.54
  retrieving revision 1.55
  diff -u -r1.54 -r1.55
  --- dso.c 2 May 2002 13:28:24 -0000 1.54
  +++ dso.c 24 Jun 2002 07:01:18 -0000 1.55
  @@ -124,8 +124,11 @@
   #elif defined(DSO_USE_DYLD)
       NSObjectFileImage image;
       NSModule os_handle = NULL;
  + NSObjectFileImageReturnCode dsoerr;
       char* err_msg = NULL;
  - if (NSCreateObjectFileImageFromFile(path, &image) == NSObjectFileImageSuccess) {
  + dsoerr = NSCreateObjectFileImageFromFile(path, &image);
  +
  + if (dsoerr == NSObjectFileImageSuccess) {
   #if defined(NSLINKMODULE_OPTION_RETURN_ON_ERROR) && defined(NSLINKMODULE_OPTION_NONE)
           os_handle = NSLinkModule(image, path,
                                    NSLINKMODULE_OPTION_RETURN_ON_ERROR |
  @@ -135,7 +138,9 @@
   #endif
           NSDestroyObjectFileImage(image);
       }
  - else if (NSAddLibrary(path) == TRUE) {
  + else if ((dsoerr == NSObjectFileImageFormat ||
  + dsoerr == NSObjectFileImageInappropriateFile) &&
  + NSAddLibrary(path) == TRUE) {
           os_handle = (NSModule)DYLD_LIBRARY_HANDLE;
       }
       else {
  
  
  
  1.84 +13 -7 apr/test/Makefile.in
  
  Index: Makefile.in
  ===================================================================
  RCS file: /home/cvs/apr/test/Makefile.in,v
  retrieving revision 1.83
  retrieving revision 1.84
  diff -u -r1.83 -r1.84
  --- Makefile.in 13 May 2002 16:35:05 -0000 1.83
  +++ Makefile.in 24 Jun 2002 07:01:18 -0000 1.84
  @@ -55,7 +55,7 @@
   
   LOCAL_LIBS=../libapr.la
   
  -CLEAN_TARGETS = testfile.tmp testdso@EXEEXT@ mod_test.so
  +CLEAN_TARGETS = testfile.tmp testdso@EXEEXT@ mod_test.slo
   
   INCDIR=../include
   INCLUDES=-I$(INCDIR)
  @@ -76,9 +76,8 @@
   testfmt@EXEEXT@: testfmt.lo $(LOCAL_LIBS)
           $(LINK) testfmt.lo $(LOCAL_LIBS) $(ALL_LIBS)
   
  -### why the export-dynamic?
  -testdso@EXEEXT@: testdso.lo mod_test.so $(LOCAL_LIBS)
  - $(LINK) -export-dynamic testdso.lo $(LOCAL_LIBS) $(ALL_LIBS)
  +testdso@EXEEXT@: testdso.lo mod_test.la libmod_test.la $(LOCAL_LIBS)
  + $(LINK) testdso.lo $(LOCAL_LIBS) $(ALL_LIBS)
   
   testoc@EXEEXT@: testoc.lo occhild@EXEEXT@ $(LOCAL_LIBS)
           $(LINK) testoc.lo $(LOCAL_LIBS) $(ALL_LIBS)
  @@ -86,9 +85,16 @@
   occhild@EXEEXT@: occhild.lo $(LOCAL_LIBS)
           $(LINK) occhild.lo $(LOCAL_LIBS) $(ALL_LIBS)
   
  -mod_test.so: mod_test.lo $(LOCAL_LIBS)
  - $(LINK) -shared mod_test.o $(LOCAL_LIBS) $(ALL_LIBS)
  -
  +# FIXME: -prefer-pic is only supported with libtool-1.4+
  +mod_test.slo: mod_test.c
  + $(LIBTOOL) --mode=compile $(COMPILE) -prefer-pic -c $< && touch $@
  +
  +mod_test.la: mod_test.slo $(LOCAL_LIBS)
  + $(LINK) --mode=link $(COMPILE) -rpath $(shell pwd) -avoid-version -module mod_test.lo $(LT_LDFLAGS) $(ALL_LDFLAGS) -o $@
  +
  +libmod_test.la: mod_test.slo $(LOCAL_LIBS)
  + $(LINK) --mode=link $(COMPILE) -rpath $(shell pwd) -avoid-version mod_test.lo $(LT_LDFLAGS) $(ALL_LDFLAGS) -o $@
  +
   testargs@EXEEXT@: testargs.lo $(LOCAL_LIBS)
           $(LINK) testargs.lo $(LOCAL_LIBS) $(ALL_LIBS)
   
  
  
  
  1.21 +34 -17 apr/test/testdso.c
  
  Index: testdso.c
  ===================================================================
  RCS file: /home/cvs/apr/test/testdso.c,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- testdso.c 10 May 2002 03:56:19 -0000 1.20
  +++ testdso.c 24 Jun 2002 07:01:19 -0000 1.21
  @@ -65,22 +65,27 @@
   #endif
   
   #ifdef NETWARE
  -#define LIB_NAME "mod_test.nlm"
  +# define LIB_NAME "mod_test.nlm"
   #else
  -# ifndef BEOS
  -# define LIB_NAME ".libs/mod_test.so"
  -# else
  +# ifdef BEOS
   # define LIB_NAME "mod_test.so"
  +# else
  +# ifdef DARWIN
  +# define LIB_NAME ".libs/mod_test.so"
  +# define LIB_NAME2 ".libs/libmod_test.dylib"
  +# else
  +# define LIB_NAME ".libs/mod_test.so"
  +# define LIB_NAME2 ".libs/libmod_test.so"
  +# endif
   # endif
   #endif
   
  -int main (int argc, char ** argv)
  +void test_shared_library(const char *libname, apr_pool_t *pool)
   {
       apr_dso_handle_t *h = NULL;
       apr_dso_handle_sym_t func1 = NULL;
       apr_dso_handle_sym_t func2 = NULL;
       apr_status_t status;
  - apr_pool_t *cont;
       void (*function)(void);
       void (*function1)(int);
       int *retval;
  @@ -88,19 +93,11 @@
   
       getcwd(filename, 256);
       strcat(filename, "/");
  - strcat(filename, LIB_NAME);
  -
  - apr_initialize();
  - atexit(apr_terminate);
  -
  - if (apr_pool_create(&cont, NULL) != APR_SUCCESS) {
  - fprintf(stderr, "Couldn't allocate context.");
  - exit(-1);
  - }
  + strcat(filename, libname);
   
       fprintf(stdout,"Trying to load DSO now.....................");
       fflush(stdout);
  - if ((status = apr_dso_load(&h, filename, cont)) != APR_SUCCESS){
  + if ((status = apr_dso_load(&h, filename, pool)) != APR_SUCCESS){
           char my_error[256];
           apr_strerror(status, my_error, sizeof(my_error));
           fprintf(stderr, "%s!\n", my_error);
  @@ -161,6 +158,26 @@
           exit (-1);
       }
       fprintf(stdout,"OK\n");
  -
  +}
  +
  +int main (int argc, char ** argv)
  +{
  + apr_pool_t *pool;
  +
  + apr_initialize();
  + atexit(apr_terminate);
  +
  + if (apr_pool_create(&pool, NULL) != APR_SUCCESS) {
  + fprintf(stderr, "Couldn't allocate context.");
  + exit(-1);
  + }
  +
  + fprintf(stdout,"=== Checking module library ===\n");
  + test_shared_library(LIB_NAME, pool);
  +#ifdef LIB_NAME2
  + fprintf(stdout,"=== Checking non-module library ===\n");
  + test_shared_library(LIB_NAME2, pool);
  +#endif
  +
       return 0;
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Mon Jun 24 10:58:04 2002

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.