Lines Matching refs:node

89     RefNode   *node;
94 node = (RefNode*)jvmtiAllocate((int)sizeof(RefNode));
95 if (node == NULL) {
102 jvmtiDeallocate(node);
108 (gdata->jvmti, weakRef, ptr_to_jlong(node));
111 jvmtiDeallocate(node);
116 node->ref = weakRef;
117 node->isStrong = JNI_FALSE;
118 node->count = 1;
119 node->seqNum = newSeqNum();
123 return node;
128 deleteNode(JNIEnv *env, RefNode *node)
130 LOG_MISC(("Freeing %d (%x)\n", (int)node->seqNum, node->ref));
132 if ( node->ref != NULL ) {
135 (gdata->jvmti, node->ref, NULL_OBJECT_ID);
136 if (node->isStrong) {
137 JNI_FUNC_PTR(env,DeleteGlobalRef)(env, node->ref);
139 JNI_FUNC_PTR(env,DeleteWeakGlobalRef)(env, node->ref);
143 jvmtiDeallocate(node);
148 strengthenNode(JNIEnv *env, RefNode *node)
150 if (!node->isStrong) {
153 strongRef = JNI_FUNC_PTR(env,NewGlobalRef)(env, node->ref);
159 if ((strongRef == NULL) && !isSameObject(env, node->ref, NULL)) {
163 JNI_FUNC_PTR(env,DeleteWeakGlobalRef)(env, node->ref);
164 node->ref = strongRef;
165 node->isStrong = JNI_TRUE;
169 return node->ref;
175 weakenNode(JNIEnv *env, RefNode *node)
177 if (node->isStrong) {
180 weakRef = JNI_FUNC_PTR(env,NewWeakGlobalRef)(env, node->ref);
182 JNI_FUNC_PTR(env,DeleteGlobalRef)(env, node->ref);
183 node->ref = weakRef;
184 node->isStrong = JNI_FALSE;
188 return node->ref;
193 * Returns the node which contains the common reference for the
207 RefNode *node;
209 node = (RefNode*)jlong_to_ptr(tag);
210 return node;
215 /* Locate and delete a node based on ID */
220 RefNode *node;
224 node = gdata->objectsByID[slot];
227 while (node != NULL) {
228 if (id == node->seqNum) {
230 node->count -= refCount;
232 node->count = 0;
234 if (node->count <= 0) {
235 if ( node->count < 0 ) {
240 gdata->objectsByID[slot] = node->next;
242 prev->next = node->next;
244 deleteNode(env, node);
248 prev = node;
249 node = node->next;
254 * Returns the node stored in the object hash table for the given object
259 * is garbage collected by the time the caller inspects node->ref.
260 * Callers should take care using the node->ref object returned here.
267 RefNode *node;
271 node = gdata->objectsByID[slot];
274 while (node != NULL) {
275 if ( id == node->seqNum ) {
278 prev->next = node->next;
279 node->next = gdata->objectsByID[slot];
280 gdata->objectsByID[slot] = node;
284 node = node->next;
286 return node;
303 hashIn(RefNode *node)
308 slot = hashBucket(node->seqNum);
309 node->next = gdata->objectsByID[slot];
310 gdata->objectsByID[slot] = node;
317 RefNode *node;
319 /* Allocate the node and set it up */
320 node = createNode(env, ref);
321 if ( node == NULL ) {
358 hashIn(node);
359 return node;
379 RefNode *node;
381 node = gdata->objectsByID[i];
382 while (node != NULL) {
385 next = node->next;
386 deleteNode(env, node);
387 node = next;
416 RefNode *node;
418 node = findNodeByRef(env, ref);
419 if (node == NULL) {
420 node = newCommonRef(env, ref);
421 if ( node != NULL ) {
422 id = node->seqNum;
425 id = node->seqNum;
426 node->count++;
445 RefNode *node;
447 node = findNodeByID(env, id);
448 if (node != NULL) {
449 if (node->isStrong) {
450 saveGlobalRef(env, node->ref, &ref);
454 lref = JNI_FUNC_PTR(env,NewLocalRef)(env, node->ref);
456 /* Object was GC'd shortly after we found the node */
457 deleteNodeByID(env, node->seqNum, ALL_REFS);
459 saveGlobalRef(env, node->ref, &ref);
491 RefNode *node;
494 node = findNodeByID(env, id);
495 if (node == NULL) {
500 strongRef = strengthenNode(env, node);
522 RefNode *node;
525 node = findNodeByID(env, id);
526 if (node != NULL) {
529 weakRef = weakenNode(env, node);
560 RefNode *node;
572 node = gdata->objectsByID[i];
574 while (node != NULL) {
576 if ( (!node->isStrong) &&
577 isSameObject(env, node->ref, NULL)) {
582 gdata->objectsByID[i] = node->next;
584 prev->next = node->next;
586 freed = node;
587 node = node->next;
590 prev = node;
591 node = node->next;