[JDEV] Trouble compiling Jabberd v1.4.2 under recent versions of Cygwin

Frank Seesink frank at mail.wvnet.edu
Mon Jun 16 20:26:52 CDT 2003


______________________________________________________________________
SHORT VERSION:

	I am not new to Jabberd.  I am looking for help to track down the 
source of a problem I am experiencing.  I believe the issue lies either 
in Jabberd, the GNU pth, or Cygwin itself, but I need outside confirmation.

	After getting Jabberd to compile under Cygwin (see LONG VERSION for 
more details), attempts to fire it up using the command from the Jabberd 
home directory with the debug flag:

	./jabberd/jabberd.exe -D -c /usr/local/jabber/jabber.xml

result in the following error message, which I've never gotten before:
	____________________________________________________________
	Mon Jun 16 20:41:45 2003  mio.c:578 MIO is starting up
	Mon Jun 16 20:41:45 2003  mio.c:607 mio while loop top
	**Pth** STACK OVERFLOW: thread pid_t=0xa0405c0, name="unknown"
	Segmentation fault
	____________________________________________________________

If anyone has been able to compile from source and RUN Jabberd 1.4.2 
using the latest Cygwin files (I have v1.3.22-1 of the DLL installed, 
and all the latest files) and either the included GNU pth 1.4.0 files 
(or the latest 2.0.0 files for that matter), I would really like to hear 
from you.

	And if anyone is familiar with the error above, any advice would be 
appreciated.  Turns out the **Pth** line is generated by a function in 
within pth, located in the pth_sched.c file.  My question is whether the 
goof is due to pth, jabberd, or some change in Cygwin since I last did 
this successfully about 4-5 months ago.

______________________________________________________________________
LONG VERSION:

	Starting around the beginning of the year, I began playing with Jabberd 
v.1.4.2 for internal use at our office.  Our departmental server is a 
Windows box, hence the need to make Jabberd work under Cygwin.  After 
dealing with the usual compilation headaches, I was able to get the 
following working (tested using Rhymbox 1.5 from various clients):

	* basic Jabberd functionality (registration, rosters, etc.)
	* JUD v0.4 (for User Directory support)
	* MU-conference v0.3 (for groupchat)
	* SSL support

Details on this later, but suffice it to say that the basic procedure I 
could follow for a clean Cygwin Jabberd install (where pth was not yet 
installed) went something like this:

1.  Decompress Jabberd files to /usr/local/jabber
2.  cd /usr/local/jabber/jabberd/pth-1.4.0
3.  make; make test; make install
4.  cd /usr/local/jabber
5.  ./configure
     As you likely know, this step obliterates various Makefile's all
     over the source tree, completely overwrites /usr/local/jabber/dnsrv,
     and in general is not the most elegant solution, though I applaud
     whoever did it, because it DOES (or at least DID) work, and that's
     key.
6.  cd /usr/local/jabber/jabberd
7.  Edit Makefile so that the 'ld' link lines have $(LDFLAGS) tacked
     onto the ends of them.  [Not sure why this was omitted in the
     distro.]
8.  cd /usr/local/jabber
9.  make
10. cp /usr/local/jabber/dnsrv/jabadns.exe /usr/local/bin/
     [This last step illudes many people.  Took me awhile to figure this
     one out, but yes, it helps to have jabadns.exe in your PATH.]

Though I know all the pain others have gone through, making 'ln -s' 
links in /usr/lib, etc., for the various pth files, this was not really 
necessary.  GNU pth installs itself into /usr/local/.., and as long as 
the linker knows where to look, that was all that really was needed. 
And copying javadns.exe to /usr/local/bin just made it more accessible 
to jabberd.exe when you fired it up.

	Anyway, this all worked fine and dandy in the past for BASIC 
compilation of Jabberd (and still does).  That is, no JUD, no 
MU-conference, no SSL.  Just vanilla Jabberd.

	However, NOW I get the error message listed above in the SHORT VERSION. 
  Apparently just firing up Jabberd is causing a stack overflow.  After 
Googling around a bit, it seems that one of the many limitations under 
Cygwin/Windows is that sigstack is not really supported, so there's a 
hack.  More importantly, the pth stack appears to be static, not able to 
grow if necessary with dynamic calls for more memory.

	Anyway, my point is this:  This used to work just fine.  Now the 
Jabberd server compiles just fine, but it dies when you fire it up.  No 
changes in the install process.  The only changes since I did this 4-5 
months ago are that Cygwin is at a much newer version now, gcc has 
changed, the various libraries have been updated, various Windows 
updates have been applied, blah blah blah.  So I have no clue where the 
problem lies.  And I would really like to track this down.

	Please note that I have been working on adjusting the various config 
files in the standard Jabberd v1.4.2 distribution so as that, if dropped 
in place, users could compile Jabberd under Cygwin just as they do under 
most *nixes.  At this point I can cleanly build Jabberd, JUD v0.4, 
MU-conference v0.5.2, xdb_sql v1.3, and though I haven't got OpenLDAP 
installed, I believe my modified Makefile for xdb_ldap will build that 
as well.

	Not only that, but I can build all of these with or without the 
--enable-ssl flag, and yes, in the past when Jabberd was running, I had 
full SSL support working.  And all this without changing a single line 
of source code.  All I have been doing is making changes to ./configure 
and various 'Makefile' in the distribution.

	My end goal--beyond just getting Jabberd to work of course :-) --is 
that I would like to submit my changes to the Jabberd maintainers, 
possibly for inclusion in the distribution or maybe just an external 
piece for those so inclined, and ultimately I would like to build either 
a Cygwin package and/or a Windows installer with all this packaged 
together so as to make the world of JABBER just a little more 
accessible.  At the very least, I will make these modified files 
available to anyone/everyone who would like them, just as soon as I can 
be sure they are working properly...which is hard to do when the .EXE 
dies on startup. :-/

	Please note I have tried many things, including but not limited to the 
following:

* Prior to any compilation, I have reset Cygwin so that pth is not
   installed, etc.
* I have tried my new Makefile/config files to build jabberd/etc. and
   they build fine.  Commands like
	./jabberd/jabberd.exe -v
   kick back version information as they should, but any attempt to fire
   up jabberd results in the error message above.
* I have tried compiling jabberd after installing pth-1.4.0 cleanly,
   and I have also tried doing so after installing pth-2.0.0 cleanly
   (note I always do a 'make uninstall' to remove pth before starting
   over again doing a clean install)
* I have tried the above using both the original Jabberd 1.4.2
   distribution files (making the one change to ./jabberd/jabberd.h
   mentioned earlier) and using my modified Makefile setup.  In all
   cases the DLLs and .EXEs built fine.  And getting jabberd.exe to
   run to give me version information works fine.  But the moment I try
   to bring the server online, that's it.

	I would really like to resolve this issue, both because I would like to 
use this compilation myself (with Jabberd hooking into PostgreSQL via 
xdb_sql), and so I can verify my config file changes and get them out 
for others to use if they help at all.

	So any help you can offer to track down this error would be greatly 
appreciated.  Thanks in advance for any and all help.





More information about the JDev mailing list