[asterisk-dev] Some 1.4.0-beta2 and Solaris 10 issues...

Jason Parker jparker at digium.com
Sat Sep 23 10:40:25 MST 2006


----- Lee Essen <lee.essen at nowonline.co.uk> wrote:
> Hi,
> 
> I'm not sure if anyone is tracking Solaris support for Asterisk here,
> 
> but these may be of interest and some of the issues may actually exist
> 
> on other platforms ... I can raise these all in the bug tracker if 
> needed, so please advise the best thing to do.
> 
> It's been a bit of a mammoth session trying to get this to work (with
> 
> the mutex issue being particularly awkward) so I apologise for the 
> length of this ... but it at least builds and runs on Solaris 10, 
> testing actual calls will follow later! :-)
> 
> Regards,
> 
> Lee.
> 
> 
> 1. Linked List Mutex issue -- this looks like a generic problem
> 
> In lock.h, for static AST_MUTEX's the define (__AST_MUTEX_DEFINE) has
> a 
> constructor that calls ast_mutex_init() which ensures the type is set
> to 
> PTHREAD_MUTEX_RECURSIVE, this is all great and works perfectly,
> however 
> if you look at linkedlist.h you will see that AST_LIST_HEAD_STATIC has
> 
> an ast_mutex_t field that is given an initial value but not
> subsequently 
> ast_mutex_init'ed, on Solaris this causes it to not be a 
> PTHREAD_MUTEX_RECURSIVE and causes Asterisk to deadlock on loading
> modules.
> 
> As a workaround I've added the constructor and destructor to the 
> AST_LIST_HEAD_STATIC routine and it works fine, but the final solution
> 
> will need to be somewhat more complex given the arrangement of
> #ifdef's 
> in lock.h.
> 
> 2. DEBUG_THREAD and comparing structs??
> 
> If you turn on DEBUG_THREAD then lock.h does a number of struct 
> comparisons that are invalid and cause the compilation to fail, I did
> 
> experiment with using memcmp instead but didn't manage to get it to
> work 
> properly.
> 
> For reference these are generally comparisons of t->mutex with either
> 
> PTHREAD_MUTEX_INITIALIZER or (empty_mutex).
> 
> 3. Missing cast of PTHREAD_MUTEX_INITIALIZER
> 
> Still in lock.h, at the end of __ast_pthread_mutex_destroy there is an
> 
> assignment to t->mutex which fails to compile unless you cast it to 
> (pthread_mutex_t). I think this was only with DEBUG_THREAD set.
> 
> 4. build_tools/prep_moduledeps ... "-e"
> 
> On Solaris both grep and echo don't take a "-e" option, the grep fails
> 
> and the echo causes an extra "-e" in the output. Removing the "-e"
> seems 
> to work fine (although see later about C++ files.)
> 
> 5. build_tools/get_moduleinfo and build_tools/get_makeopts
> 
> On Solaris awk doesn't like empty expressions (//) and fails to build
> 
> all of the dependency stuff. Removing the // works fine ... I'm not 
> aware of this being a problem with any other awk's so this should be
> an 
> easy one!
> 
> 6. menuselect-tree issues with C++ files (vpb and kdeconsole)
> 
> For C++ source files the menuselect-tree file seems to have an extra
> "." 
> which causes the dependencies to fail (i.e. "vpb." and "vpb..o" etc.)
> 
> I haven't dug into this in any detail yet and could be related to the
> 
> previous issues.
> 
> 7. install-sh problems
> 
> By default the install-sh script is picked but used as "./install-sh"
> 
> which is fine until the make sequence moves into another directory. In
> 
> addition install-sh uses "mv" by default which moves all the include 
> files out of the way causes later installs to fail.
> 
> This is easily fixed by using INSTALL="/usr/ucb/install", but it would
> 
> be good if it detected this automatically.
> 
> 8. curl include path
> 
> Not really an asterisk issue, but for some reason the SunFreeWare curl
> 
> package doesn't return the include info from curl-config (the lib
> stuff 
> is fine) ... would be nice to have that as a "configure" option -- at
> 
> the moment I have to hack the makeopts file.
> 
> 9. "id" command options in Makefile
> 
> On Solaris the "id" command does not take the "-un" options, the
> easiest 
> fix here would be to use $LOGNAME or $USER.
> 
> 10. $includedir in Makefile bininstall
> 
> In the bininstall section $(DESTDIR)$(ASTHEADERDIR) is created, but 
> $(DESTDIR)$(includedir) which is used immediately after is not
> created, 
> causing problems if they happen to be different (which they are by 
> default on Solaris.)
> 
> 11. tar in sounds/Makefile
> 
> Solaris tar does not take "C" as an option (tar xCf) ... gtar is 
> available and works perfectly.
> 
> 12. wait4 different usage between Solaris and Linux
> 
> In main/asterisk.c wait4(-1,...) is used, on Solaris the same
> behaviour 
> actually needs a wait4(0,...) -- you'll have lots of AGI zombie 
> processes around if left unchanged.
> 
> 13. FYI ... Solaris make is rubbish and gmake is too old.
> 
> By default Solaris has "gmake" (gnu make) v3.80 which fails with a 
> "virtual memory exhausted" error, and the default Solaris "make"
> doesn't 
> get anywhere.
> 
> Upgrading to gnu make v3.81 fixes the memory problem.
> 

I've been doing a bit of the work to get Asterisk running properly on Solaris, so I've seen a few of the issues you're running into.

4. I thought I had fixed this...guess not.
7. If you install fileutils, it will find and use ginstall instead of install-sh.
8. I've not seen this problem when using the blastwave curl package.
9. The version of id in /usr/xpg4/bin/ does support -un.  Is this in your PATH?
10. Do we just need to do a `$(INSTALL) -d $(DESTDIR)$(includedir)` here?
11. This was recently changed, and it will be fixed shortly.
13. You do indeed need gmake 3.81.  This requirement may be removed in the future (for tarball releases).

Please post a bug report for the rest.  It may make sense to group some of them together in one report.


-- 
Jason Parker
Digium



More information about the asterisk-dev mailing list