Hey Chad,

That looks like the right solution. Note that if you use libumem, and
set UMEM_DEBUG=guards, this happens every time due to the attempted
double free of the dt_ident_t.

Adam

On May 13, 2009, at 5:47 AM, Chad Mynhier wrote:

I'm looking for some advice on how to approach fixing a bug in DTrace.

The following script will cause dtrace(1M) to core dump:

#!/usr/sbin/dtrace -s

#pragma D option version=1.0

this zio_t *io;

inline char io_type = (this->io->io_type == ZIO_TYPE_NULL) ? '.' : '?';

BEGIN
{
    exit(0);
}

(Jon started seeing this core dump with a build using my fix to
6779011: "libdtrace sometimes dumps core when running test.1.0.d".)

The problem is that the dt_ident_t for io is referenced in the
dt_node_t for the RHS of io_type _after_ dt_idhash_destroy() is called
to blow away the dt_ident_t for io.

One thought I had to fix this is to post-process the RHS dt_node_t,
making a copy of any dt_ident_t with DT_IDFLG_LOCAL to avoid this
case.  I've thrown up a webrev including these changes here:
http://cr.opensolaris.org/~cmynhier/6795386-globalize/.  The changes
specific to this bug are in dt_parser.c and dt_ident.c.

Is this the right approach, or should I be fixing this some other way?

Chad
_______________________________________________
dtrace-discuss mailing list
dtrace-discuss@opensolaris.org


--
Adam Leventhal, Fishworks                        http://blogs.sun.com/ahl

_______________________________________________
dtrace-discuss mailing list
dtrace-discuss@opensolaris.org

Reply via email to