[Mono-dev] StreamReader.ReadToEnd crashes sometimes
cs_eps
christian.schmid at eps.ch
Fri Feb 4 08:06:39 EST 2011
Hallo experts!
Once in a while StreamReader.ReadToEnd() crashes with the following stack
trace:
Mprotect failed at 0x4621e000 (length 20480) with errno 12
Stacktrace:
at (wrapper managed-to-native)
object.__icall_wrapper_mono_array_new_specific (intptr,int) <0xffffffff>
at System.IO.StreamReader.ReadToEnd () <0x00063>
at Skywalker.Core.Platform.CPlatformLinux.ExecSync (string,string,string&)
<0x001eb>
at Skywalker.Core.Platform.CPlatformArchos5._ReadBattery () <0x0005f>
at Skywalker.Core.Platform.CPlatformArchos5.get_BatteryLevel () <0x0001b>
at Skywalker.UserInterface.Controls.CPnlEnvCUBattery.UpdateBatteryState ()
<0x00037>
at (wrapper remoting-invoke-with-check)
Skywalker.UserInterface.Controls.CPnlEnvCUBattery.UpdateBatteryState ()
<0x00067>
at Skywalker.UserInterface.Controls.CEnvStatusBar.OnEnvTimerTick
(object,System.EventArgs) <0x00043>
at System.Windows.Forms.Timer.OnTick (System.EventArgs) <0x0003b>
at System.Windows.Forms.Timer.FireTick () <0x0002f>
at (wrapper remoting-invoke-with-check)
System.Windows.Forms.Timer.FireTick () <0x00067>
at System.Windows.Forms.XplatUIX11.CheckTimers
(System.Collections.ArrayList,System.DateTime) <0x00313>
at System.Windows.Forms.XplatUIX11.UpdateMessageQueue
(System.Windows.Forms.XEventQueue) <0x003c3>
at System.Windows.Forms.XplatUIX11.GetMessage
(object,System.Windows.Forms.MSG&,intptr,int,int) <0x002cf>
at System.Windows.Forms.XplatUI.GetMessage
(object,System.Windows.Forms.MSG&,intptr,int,int) <0x00067>
at System.Windows.Forms.Application.RunLoop
(bool,System.Windows.Forms.ApplicationContext) <0x00c1b>
at System.Windows.Forms.Application.Run
(System.Windows.Forms.ApplicationContext) <0x0005b>
at System.Windows.Forms.Application.Run (System.Windows.Forms.Form)
<0x00033>
at Skywalker.Program.Main.Program.Main () <0x0007f>
at (wrapper runtime-invoke) object.runtime_invoke_void
(object,intptr,intptr,intptr) <0x0009f>
Native stacktrace:
mono [0xeecb8]
mono [0x134fb4]
/lib/libc.so.6(__default_rt_sa_restorer_v2+0) [0x4010bb20]
mono [0x2c391c]
mono [0x2c3370]
mono [0x2c978c]
mono [0x2c9d18]
mono [0x2c9fdc]
mono [0x258be0]
mono(mono_array_new_specific+0x98) [0x258d38]
[0x4084e470]
mono(mono_array_new_specific+0xc) [0x258cac]
mono(mono_array_new_specific+0xc) [0x258cac]
mono(mono_array_new_specific+0xc) [0x258cac]
mono(mono_array_new_specific+0xc) [0x258cac]
...
...
...
warning: Unable to find libthread_db matching inferior's thread library,
thread debugging will not be available.
warning: Unable to find libthread_db matching inferior's thread library,
thread debugging will not be available.
warning: Unable to find libthread_db matching inferior's thread library,
thread debugging will not be available.
Cannot access memory at address 0x44ef
0x400be3b4 in read () from /lib/libpthread.so.0
* 1 process 26404 0x400be3b4 in read () from /lib/libpthread.so.0
Thread 1 (process 26404):
#0 0x400be3b4 in read () from /lib/libpthread.so.0
#1 0x400bdd94 in ?? () from /lib/libpthread.so.0
#2 0xbede9fcc in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
=================================================================
Got a SIGABRT while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries
used by your application.
=================================================================
Here the code snippet that causes the exception. Unfortunately we can not
catch it, so the application terminates.
using (Process p = new Process())
{
// Redirect the output stream of the child process.
p.StartInfo.UseShellExecute = false; //true for open
documents with the associated application
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = p_Process;
p.StartInfo.Arguments = p_Arguments;
try
{
if (p.Start() && p.Id > 0)
{
pid = p.Id;
_Logger.Debug(string.Format("process {0} {1} started
with pid={2}", p_Process, p_Arguments, pid));
// Do not wait for the child process to exit before
// reading to the end of its redirected stream.
p_Output = p.StandardOutput.ReadToEnd();
//wait for completion
p.WaitForExit();
// fetch the exit code
exitCode = p.ExitCode;
_Logger.Debug(string.Format("process with pid={0}
exited with code {1}", pid, exitCode));
}
else
{
_Logger.Warn(string.Format("process {0} {1} did not
start", p_Process, p_Arguments));
CompactMemory();
}
}
catch (Exception ex)
{
_Logger.Warn(string.Format("exception in process {0}:
{1} ", p_Process, ex.Message));
}
}
Is there a fix for this? or a workaround?
Every help is appreciated!
--
View this message in context: http://mono.1490590.n4.nabble.com/StreamReader-ReadToEnd-crashes-sometimes-tp3260133p3260133.html
Sent from the Mono - Dev mailing list archive at Nabble.com.
More information about the Mono-devel-list
mailing list