protected boolean sendCancelGridlet(int tag, Gridlet gl, int gridletId,
                                        int destId)
    {
        if (tag != GridSimTags.GRIDLET_CANCEL) {
            return false;
        }

        long gridletSize = 0;
        if (gl != null) {
            gridletSize = gl.getGridletOutputSize();
        }

        // if no Gridlet found, then create a new Gridlet but set its status
        // to FAILED. Then, most importantly, set the resource parameters
        // because the user will search/filter based on a resource ID.
        else if (gl == null)
        {
            try
            {
                gridletSize = 100;
                gl = new Gridlet(gridletId, 0, gridletSize, gridletSize);
                gl.setGridletStatus(Gridlet.FAILED);
                gl.setResourceParameter(resId_, resource_.getCostPerSec());
            }
            catch(Exception e) {
                // empty ...
            }
        }

        super.sim_schedule( outputPort_, GridSimTags.SCHEDULE_NOW, tag,
                            new IO_data(gl, gridletSize, destId) );

        return true;
    }