dotgnu-general
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [DotGNU]TestTimerAAAAA ... Uncaught exception


From: Phil Freed
Subject: Re: [DotGNU]TestTimerAAAAA ... Uncaught exception
Date: Mon, 23 Aug 2004 13:42:55 -0400

For some reason, this bounced back to me after a few days -- so here it is again:
===

I wrote about problems compiling the pnet package on Solaris 2.8.

At 11:41 PM 8/14/2004, Rhys Weatherley wrote:
You will probably need to turn threading on explicitly.  Rebuild pnet after
reconfiguring as follows:

    ./configure --enable-threads=posix

If you manage to get threading working on Solaris, then we can turn it on
permanently in CVS.

I didn't have much luck with just disabling the threading tests (see below), so I decided to delve in and do some actual work for a change. I haven't actually gotten anything working -- but I've learned a few things that I thought I'd pass on.

Here's what I've learned so far. I've included all my notes, in the hope that someone will find it helpful.

1) Configuring with -enable-threads=posix on a Solaris box doesn't actually do everything it needs to. The problem is in support/thr_choose.h, which defines IL_USE_PTHREADS for linux and Win32 systems -- but not Solaris.

2)  Defining IL_USE_PTHREADS lets us continue.  next, the make fails at
  ../include/il_values.h:36:24: il_profile.h: No such file or directory

It appears that this is a side-effect of using the "-j5" option on make, though I didn't research it too closely. Doing a make without the "-j" option allows that include file to be created before it is needed. I suppose that there must be a dependency missing in the makefile.

3)  OK -- so I've done that.  Next problem:

gcc [...]  -c allocate.c

In file included from thr_defs.h:38,
                 from allocate.c:21:
pt_defs.h:50:30: missing binary operator before token "_sysconf"
pt_defs.h:64:30: missing binary operator before token "_sysconf"
allocate.c: In function `ILPageAlloc':
allocate.c:309: warning: missing braces around initializer
allocate.c:309: warning: (near initialization for `__once.__pthread_once_pad')
make[1]: *** [allocate.o] Error 1
make[1]: Leaving directory `/var/tmp/t/pnet-0.6.8/support'
make: *** [all-recursive] Error 1


The first pair of errors above (_sysconf) come from this section of support/pt_defs.h:

#if !defined(__SIGRTMIN) && defined(SIGRTMIN)
#define __SIGRTMIN                      SIGRTMIN
#endif
#if !defined(__SIGRTMAX) && defined(SIGRTMAX)
#define __SIGRTMAX                      SIGRTMAX
#endif
[...]
#if !defined(__SIGRTMIN) || (__SIGRTMAX - __SIGRTMIN < 14)
[...]
#if !defined(__SIGRTMIN) || (__SIGRTMAX - __SIGRTMIN < 3)

and from this section of the system include file sys/iso/signal_iso.h:

/* insert new signals here, and move _SIGRTM* appropriately */
#define _SIGRTMIN 38    /* first (highest-priority) realtime signal */
#define _SIGRTMAX 45    /* last (lowest-priority) realtime signal */
extern long _sysconf(int);      /* System Private interface to sysconf() */
#define SIGRTMIN ((int)_sysconf(_SC_SIGRT_MIN)) /* first realtime signal */
#define SIGRTMAX ((int)_sysconf(_SC_SIGRT_MAX)) /* last realtime signal */


You'll notice that SIGRTMIN is defined as the result of a function instead of the constant that you would expect. I confess that I don't understand why this was done -- unless these values are someday expected to change dynamically. In any case, having the call to _sysconf makes the preprocessor hack fail in support/pt_defs.h.


I checked empirically, SIGRTMIN / MAX return 38 and 45 respectively. Maybe the correct thing to do here on Solaris is
  #define __SIGRTMIN                      _SIGRTMIN
  #define __SIGRTMAX                      _SIGRTMAX
but I'm not really sure.  In any case, that's what I did in order to proceed.

The second error above (allocate.c:309: warning: missing braces around initializer) is easily fixed by changing line 225 of support/pt_defs.h from
   static pthread_once_t __once = PTHREAD_ONCE_INIT; \
to
   static pthread_once_t __once = { PTHREAD_ONCE_INIT }; \

==========

Recompiling, we get:

gcc -I../libffi/include -fno-gcse -fno-inline-functions -I../support -I../libgc/include -I../include -I../libffi/include -I. -DBUILD_PROFILE_NAME="\"full\"" -O3 -Wall -o ilverify ilverify.o libILEngine.a ../dumpasm/libILDumpAsm.a ../image/libILImage.a ../support/libILSupport.a ../libffi/.libs/libffi.a ../libgc/.libs/libgc.a -lz -lnsl -lsocket -ldl -lm -lpthread
Undefined                       first referenced
 symbol                             in file
sched_yield                         ../support/libILSupport.a(thread.o)
sem_destroy                         ../support/libILSupport.a(thread.o)
sem_post                            ../support/libILSupport.a(pt_defs.o)
sem_init                            ../support/libILSupport.a(thread.o)
sem_wait                            ../support/libILSupport.a(thread.o)
[...]


It seems that Solaris wants "-lposix4" on the link line. OK... Lets try again.

This time, there are some odd warnings -- though nothing I can't cross my fingers and ignore ...:

cs_grammar.y:2393.49-59: warning: rule never reduced because of conflicts: OptSpecificCatchClauses: /* empty */ cs_grammar.y:2394.11-52: warning: rule never reduced because of conflicts: OptSpecificCatchClauses: SpecificCatchClauses

hmm....

./mkcvmdoc.sh: python: not found

Oh well -- I guess if I want all the documentation, I'm gonna need python on this box. Time for a "make check":

[...]
make[2]: Entering directory `/var/tmp/t/pnet-0.6.8/tests'
Suite: Main Thread Properties
-----------------------------

thread_main_nonnull ... ok
thread_main_object ... ok
thread_main_running ... ok
thread_main_foreground ... ok

Suite: Thread Creation
----------------------

thread_create_arg ... ok
thread_create_suspended ... ok
thread_create_state ...
     [much time passes... ... .... .....]
     ^C^C^C^C^C^C
     ^C^C^C^C^C^C
     ^C^C^C^C^C^C

Uhoh.  The test hangs.  This is a far as I've gotten with threads enabled.

==================================

If, on the other hand, I compile pnet without threads and just disable the thread test in pnetlib, I get this:


TestXmlConvertToInt32 ... failed: CSUnit.TestAssertFailed: Test failed: ToInt32 (5)
        at CSUnit.TestCase.Fail(String) in ./TestCase.cs:148
        at TestXmlConvert.TestXmlConvertToInt32() in ./TestXmlConvert.cs:498
at System.Reflection.ClrMethod.Invoke(Object, BindingFlags, Binder, Object[], CultureInfo) at System.Reflection.MethodBase.Invoke(Object, Object[]) in ./System/Reflection/MethodBase.cs:64
        at CSUnit.TestCase.RunTest() in ./TestCase.cs:104
        at CSUnit.TestCase.Run(TestResult) in ./TestCase.cs:47
        at CSUnit.TestSuite.Run(TestResult) in ./TestSuite.cs:103
        at CSUnit.TestSuite.Run(TestResult) in ./TestSuite.cs:103
        at CSUnit.TestMain.Main(String[]) in ./TestMain.cs:247

TestXmlConvertToInt64 ... failed: CSUnit.TestAssertFailed: Test failed: ToInt64 (5)
        at CSUnit.TestCase.Fail(String) in ./TestCase.cs:148
        at TestXmlConvert.TestXmlConvertToInt64() in ./TestXmlConvert.cs:597
at System.Reflection.ClrMethod.Invoke(Object, BindingFlags, Binder, Object[], CultureInfo) at System.Reflection.MethodBase.Invoke(Object, Object[]) in ./System/Reflection/MethodBase.cs:64
        at CSUnit.TestCase.RunTest() in ./TestCase.cs:104
        at CSUnit.TestCase.Run(TestResult) in ./TestCase.cs:47
        at CSUnit.TestSuite.Run(TestResult) in ./TestSuite.cs:103
        at CSUnit.TestSuite.Run(TestResult) in ./TestSuite.cs:103
        at CSUnit.TestMain.Main(String[]) in ./TestMain.cs:247

Sigh. I'll come back to this -- but it may be a few days before I can. In the meantime, I'd be grateful for any tips you may have.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]