Re: 1.12.5 pserver core dump pid-11993

"Mark D. Baushke" <[email protected]>
Newsgroups gmane.comp.version-control.cvs.general,gmane.comp.version-control.cvs.bugs
Message-ID <[email protected]>
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi Todd,

The core dump that Mark got was because repository == NULL, so his
strlen(NULL) was generating the core dump before it could calculate the
number o bytes needed by xmalloc().

My guess is that we are running into a condition where the lock->repository
is being set to NULL for some reason and then trying to get the lockname
again which is causing a problem.

There is a fairly significant change in the use of Promotable locks in
the 1.12.5 version of cvs, but I have not tracked down the code path
that could lead to Mark's problem. If anyone else has any spare cycles
to gaze upon the interaction of waiting for a lock and under some
conditions freeing the lock->free_repository which can also cause
lock->repository to be set to NULL, please look there and see if you
have any suggestions for what may be going wrong.

	Thanks,
	-- Mark

Todd Denniston <[email protected]> writes:

> Yep, your getting through. But it is a fun question you ask. 8)
> 
> Mark wrote:
> > 
> > I have tested this. It is repeatable on solaris 2.8. I setup two
> > workareas from the same repo/module and commited at the same time,
> > one proceeded one got the waiting on lock. Once the one waiting on
> > lock gets the lock, it core dumps.
> > 
> > Please take a look at this. Our integration with another tool
> > fails and the integration process is left in a uncertain state of
> > reliability.
> > 
> > cvs 1.12.5 non-root pserver, solaris 2.8, compiled with workshop
> > 6.1, MMAP commented out in config.h
> > 
> > Thanks,
> > 
> > Mark
> 
> From the debuger output showing the death at a (x)malloc, I think we may be
> back to Larry's call that you may be running out of virtual memory.
> 
> you might try your test and with both machines (assuming client is a different
> machine) run something like
> 
> while true;do df -h /tmp ;sleep 1;done
> 
> while at the same time running your test. If the machine drops to very little
> space that is probably the problem.
> 
> BTW, How big is 
> CE-cqtool.lock
> /tmp on your server
> the free space on /tmp on your server
> ram on your server
> free ram on your server
> /cvsroot/baseline/
> the free space on /cvsroot/baseline/
> the free space in the directory where you are doing the checkout.
> 
> 
> 
> > 
> > --- Mark <[email protected]> wrote:
> > >
> > > I have 4 other core files that trace back to the same line of
> > > code, 2 others can confirm happen during a commit that is
> > > waiting
> > > on a lock, to commit one file. No locks needed cleaning up......
> > >
> > > Mark
> > >
> > > --- Mark <[email protected]> wrote:
> > > >
> > > > cvs 1.12.5 non-root pserver, solaris 2.8, workshop 6.1
> > > >
> > > > We had a pserver core dump during a commit. The command and
> > > core
> > > > trace output is below.
> > > >
> > > > Thanks,
> > > >
> > > > Mark
> > > >
> > > >
> > > ================================================================
> > > >
> > > > > cvs commit -m "datarepolockhelp commit" CE-cqtool.lock
> > > > cvs commit: [18:13:07] waiting for cvspserv's lock in
> > > > /cvsroot/baseline/CarApp
> > > > Terminated with fatal signal 11
> > > > Core dumped; preserving /cvstmp/pserver/cvs-serv11993 on
> > > server.
> > > > CVS locks may need cleaning up.
> > > >
> > > >
> > >
> > =============================================================================
> > > >
> > >
> > =============================================================================
> > > > Workshop Stack Trace: (line with arrow marked below)
> > > >
> > >
> > =============================================================================
> > > >
> > >
> > =============================================================================
> > > >    main(argc = 1, argv = 0xffbef360)
> > > >    server(argc = 1, argv = 0xffbef360)
> > > >    serve_ci(arg = 0x1bb3ca "")
> <SNIP>
> > > >    Promotable_Lock(list = 0x1e2008)
> > > >    walklist(list = 0x1e2008, proc = 0x76de8 =
> > > > &`cvs`lock.c`set_promotablelock_proc(Node *p, void *closure),
> > > >  closure = (nil))
> > > >    set_promotablelock_proc(p = 0x1b2e80, closure = (nil))
> > > >    promotable_lock(lock = 0x1b87a8)
> > > >    set_lock(lock = 0x1b87a8, will_wait = 0)
> > > > (ARROW==>)  lock_name(repository = (nil), name = 0x1740f8
> > > > "#cvs.lock")
> > > >    strlen(0x0, 0x0, 0x0, 0x7efefeff, 0x81010100, 0xff1c2ac4)
> > =============================================================================
> > =============================================================================
> > > > Workshop dbx commands
> > > >
> > >
> > =============================================================================
> > > >
> > >
> > =============================================================================
> > > > (dbx) debug cvs /tmp/core
> > > > Reading cvs
> > > > core file header read successfully
> <SNIP>
> > > > program terminated by signal SEGV (no mapping at the fault
> > > > address)
> > > > Current function is lock_name
> > > > (dbx)
> > > >
> > > >
> > > >
> > >
> > =============================================================================
> > > >
> > >
> > =============================================================================
> > > > lock.c code section provided by workshop: (line with arrow
> > > > marked
> > > > below)
> > > >
> > >
> > =============================================================================
> > > >
> > >
> > =============================================================================
> > > > static char *
> > > > lock_name (const char *repository, const char *name)
> > > > {
> > > >     char *retval;
> > > >     const char *p;
> > > >     char *q;
> > > >     const char *short_repos;
> > > >     mode_t save_umask = 0000;
> > > >     int saved_umask = 0;
> > > >
> > > >     TRACE (TRACE_FLOW, "lock_name (%s, %s)", repository,
> > > name);
> > > >
> > > >     if (lock_dir == NULL)
> > > >     {
> > > >         /* This is the easy case.  Because the lock files go
> > > > directly
> > > >            in the repository, no need to create directories or
> > > > anything.  */
> > > > (ARROW==>)        retval = xmalloc (strlen (repository) +
> > > strlen
> > > > (name) + 10);
> > > >         (void) sprintf (retval, "%s/%s", repository, name);
> > > >     }
> > > >     else
> <SNIP>
> -- 
> Todd Denniston
> Crane Division, Naval Surface Warfare Center (NSWC Crane) 
> Harnessing the Power of Technology for the Warfighter
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (FreeBSD)

iD8DBQFABBGw3x41pRYZE/gRAt5iAKCeOA2HG6PNyEzzav0tm/SYmMJaxwCgw6ln
LhpdOwWZTqTwSpnci7oSb6M=
=4Uqe
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.