Gemfire Native Client Versions 7.0.1.x to 7.0.2.x
Windows Operating System
This document provides a means to avoid a [STATUS_IN_PAGE_ERROR] error crash issue in Gemfire Native Client Application.
A GemFire Native Client Application starting from a network share folder may crash with the following exception in the GemFire client log:
[error 2014/10/01 10:35:00.988346 JST ADNF37582J:8080 8224] Debug event STATUS_IN_PAGE_ERROR occurred at 6A02E8D1 in process with pid 8080
[error 2014/10/01 10:35:01.003946 JST ADNF37582J:8080 8224] Generating debug dump in file C:\Program Files\temp\Log\Conn\_Log-1403055301-0.dmp
Dump analysis further reveals that the application crashed with ExceptionCode: c0000006 (In-page I/O error).
A C0000006 error is a networking or network connectivity error. Specifically, a C0000006 error is an in page I/O error. This error occurs when an application loses its underlying network connectivity.
When an application is started from a network share, Windows loads and runs the EXE image from a remote location. Thus, any connectivity problems with the network share folder (such as network going down) can cause the virtual memory manager to be unable to find a required memory page for an address in the swapfile. This will cause it to throw a C0000006 exception and crash the program image.
The easy way to avoid this issue is to start the application from local drive instead of a remote location.
If, however, you must start the native client application from a remote folder, there are options available when compiling that can prevent this issue from occurring:
- For VC++ applications, you can add /SWAPRUN:NET to the linker options, which will tell the operating system to first copy the linker output to a swap file and run the image from there. (See http://msdn.microsoft.com/en-us/library/chzz5ts6.aspx)
- For C# application, you can enable Shadow Copy feature by setting AppDomainSetup.ShadowCopyFiles=true. (See http://blogs.msdn.com/b/junfeng/archive/2004/02/09/69919.aspx)