/**
* Copyright (c) 2006, 2008 by Chris Gray, /k/ Embedded Java Solutions.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of /k/ Embedded Java Solutions nor the names of other contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL /K/
* EMBEDDED SOLUTIONS OR OTHER CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: ProcessInfo.java,v 1.2 2006/10/04 14:24:15 cvsroot Exp $
*/
package wonka.vm;
import java.io.IOException;
import java.lang.ref.WeakReference;
/**
* ProcessInfo:
*
* @author ruelens
*
* created: Jun 14, 2006
*/
public class ProcessInfo {
int id;
int wotsit;
boolean destroyed;
private WeakReference reference;
/**
* @see java.lang.Object#toString()
*/
public String toString() {
return super.toString()+" pid "+id+", destroyed = "+destroyed;
}
/**
* @see java.lang.Object#finalize()
*/
protected void finalize() {
//System.out.println("ProcessInfo.finalize()"+id);
cleanUp();
}
void setNativeProcess(NativeProcess process) {
reference = new WeakReference(process);
process.info = this;
}
void finish(int retval) throws IOException {
nativeReturnValue(retval);
if(reference == null) {
System.err.println("[PANIC] ProcessInfo: " +
"No referencece, this should never happen !!!");
return;
}
NativeProcess process = (NativeProcess) reference.get();
//System.out.println("ProcessInfo.finish() pid "+id+", NativeProcess "+process);
if(process != null) {
process.setReturnValue(retval);
return;
}
// [CG 20080814] Safer to leave this until the finalizer?
// cleanUp();
}
synchronized native void destroy();
private synchronized native void cleanUp();
private native void nativeReturnValue(int retval);
}