* pinfo.cc (commune_process): Fix randomly invalid pointer which caused fifos
to work incorrectly.
This commit is contained in:
parent
7d85b417f1
commit
c5c3d69d8a
|
@ -1,3 +1,8 @@
|
||||||
|
2006-03-19 Christopher Faylor <cgf@timesys.com>
|
||||||
|
|
||||||
|
* pinfo.cc (commune_process): Fix randomly invalid pointer which caused
|
||||||
|
fifos to work incorrectly.
|
||||||
|
|
||||||
2006-03-19 Christopher Faylor <cgf@timesys.com>
|
2006-03-19 Christopher Faylor <cgf@timesys.com>
|
||||||
|
|
||||||
* dcrt0.cc (dll_crt0_0): Oops. We need to bother with setting this in
|
* dcrt0.cc (dll_crt0_0): Oops. We need to bother with setting this in
|
||||||
|
|
|
@ -402,6 +402,8 @@ commune_process (void *arg)
|
||||||
ProtectHandle (process_sync);
|
ProtectHandle (process_sync);
|
||||||
|
|
||||||
lock_process now (false);
|
lock_process now (false);
|
||||||
|
if (si._si_commune._si_code & PICOM_EXTRASTR)
|
||||||
|
si._si_commune._si_str = (char *) (&si + 1);
|
||||||
|
|
||||||
switch (si._si_commune._si_code)
|
switch (si._si_commune._si_code)
|
||||||
{
|
{
|
||||||
|
@ -524,7 +526,7 @@ commune_process (void *arg)
|
||||||
}
|
}
|
||||||
case PICOM_FIFO:
|
case PICOM_FIFO:
|
||||||
{
|
{
|
||||||
sigproc_printf ("processing PICOM_FIFO");
|
sigproc_printf ("processing PICOM_FIFO for %s", si._si_commune._si_str);
|
||||||
fhandler_fifo *fh = cygheap->fdtab.find_fifo (si._si_commune._si_str);
|
fhandler_fifo *fh = cygheap->fdtab.find_fifo (si._si_commune._si_str);
|
||||||
HANDLE it[2];
|
HANDLE it[2];
|
||||||
if (fh == NULL)
|
if (fh == NULL)
|
||||||
|
|
|
@ -679,10 +679,14 @@ sig_send (_pinfo *p, siginfo_t& si, _cygtls *tls)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
size_t n = strlen (si._si_commune._si_str);
|
size_t n = strlen (si._si_commune._si_str);
|
||||||
char *p = leader = (char *) alloca (sizeof (pack) + sizeof (n) + n);
|
char *p = leader = (char *) alloca (sizeof (pack) + sizeof (n) + n /*DELETEME*/ + 1);
|
||||||
memcpy (p, &pack, sizeof (pack)); p += sizeof (pack);
|
memcpy (p, &pack, sizeof (pack));
|
||||||
memcpy (p, &n, sizeof (n)); p += sizeof (n);
|
p += sizeof (pack);
|
||||||
memcpy (p, si._si_commune._si_str, n); p += n;
|
memcpy (p, &n, sizeof (n));
|
||||||
|
p += sizeof (n);
|
||||||
|
memcpy (p, si._si_commune._si_str, n);
|
||||||
|
p[n] = '\0'; sigproc_printf ("n %d, si_str %s", n, p);
|
||||||
|
p += n;
|
||||||
packsize = p - leader;
|
packsize = p - leader;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue