private double messageSize;
- static private Long idCpt = 0L;
-
- private Long id;
-
/** Default constructor (all fields to 0 or null) */
public Task() {
create(null, 0, 0);
this.messageSize = 0;
- setId(idCpt);
- idCpt++;
}
/* * * *
*
* @param flopsAmount A value of the processing amount (in flop) needed to process the task.
* If 0, then it cannot be executed with the execute() method.
- * This value has to be >= 0.
+ * This value has to be ≥ 0.
*
* @param bytesAmount A value of amount of data (in bytes) needed to transfert this task.
* If 0, then it cannot be transfered with the get() and put() methods.
- * This value has to be >= 0.
+ * This value has to be ≥ 0.
*/
public Task(String name, double flopsAmount, double bytesAmount) {
create(name, flopsAmount, bytesAmount);
this.messageSize = bytesAmount;
- setId(idCpt);
- idCpt++;
}
/**
* Construct an new parallel task with the specified processing amount and amount for each host
/** Cancels a task. */
public native void cancel();
- /** Deletes a task.
- *
- * @exception NativeException if the destruction failed.
- */
- protected void finalize() throws NativeException {
- destroy();
+ /** Deletes a task once the garbage collector reclaims it */
+ @Override
+ protected void finalize() {
+ try {
+ // Exceptions in finalizers lead to bad situations:
+ // http://stackoverflow.com/questions/7644556/troubleshooting-a-java-memory-leak-finalization
+ nativeFinalize();
+ bind=0; // to avoid segfaults if the impossible happens yet again making this task surviving its finalize()
+ } catch (Throwable e) {
+ e.printStackTrace();
+ }
}
- /**
- * The natively implemented method to destroy a MSG task.
- */
- protected native void destroy();
+ protected native void nativeFinalize();
/* * * *
* * Communication-related * *
* * * */
* @throws HostFailureException
* @throws TransferFailureException
*/
- public void send(String mailbox) throws TransferFailureException, HostFailureException, TimeoutException {
+ public void send(String mailbox) throws TransferFailureException, HostFailureException, TimeoutException, NativeException {
send(mailbox, -1);
}
* @throws HostFailureException
* @throws TransferFailureException
*/
- public native void send(String mailbox, double timeout) throws TransferFailureException, HostFailureException, TimeoutException;
+ public native void send(String mailbox, double timeout) throws TransferFailureException, HostFailureException, TimeoutException, NativeException;
/** Sends the task on the specified mailbox (capping the sending rate to \a maxrate)
*
public double getMessageSize() {
return this.messageSize;
}
-
- public Long getId() {
- return id;
- }
-
- public void setId(Long id) {
- this.id = id;
- }
}