/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/**
* Special stream to keep track of refs being unmarshaled so that
* refs can be ref-counted locally.
*
* @author Ann Wollrath
*/
/** indicates whether ack is required for DGC */
private boolean dgcAckNeeded = false;
/** Hashtable mapping Endpoints to lists of LiveRefs to register */
/** identifier for gc ack*/
/**
* Constructs a marshal input stream using the underlying
* stream "in".
*/
super(in);
}
}
/**
* have been unmarshaled. Save in hashtable incomingRefTable. This
* table is keyed on endpoints, and holds objects of type
* IncomingRefTableEntry.
*/
// check whether endpoint is already in the hashtable
}
// add ref to list of refs for endpoint ep
}
/**
* Add references to DGC table (and possibly send dirty call).
* RegisterRefs now calls DGCClient.referenced on all
* refs with the same endpoint at once to achieve batching of
* calls to the DGC
*/
if (!incomingRefTable.isEmpty()) {
incomingRefTable.entrySet()) {
}
}
}
/**
* Indicate that an ack is required to the distributed
* collector.
*/
void setAckNeeded() {
dgcAckNeeded = true;
}
/**
* Done with input stream for remote call. Send DGC ack if necessary.
* Allow sending of ack to fail without flagging an error.
*/
/*
* WARNING: The connection c may have already been freed. It
* is only be safe to use c to obtain c's channel.
*/
if (dgcAckNeeded) {
boolean reuse = true;
try {
ch = c.getChannel();
}
/*
* Fix for 4221173: if this connection is on top of an
* HttpSendSocket, the DGCAck won't actually get sent until a
* read operation is attempted on the socket. Calling
* available() is the most innocuous way of triggering the
* write.
*/
} catch (RemoteException e) {
reuse = false;
} catch (IOException e) {
reuse = false;
}
try {
} catch (RemoteException e){
// eat exception
}
}
}
}