jdk/src/share/native/sun/tracing/dtrace/JVM.c
changeset 25754 2fc68d1b7c03
parent 23056 af6eda86177e
child 25755 49d8c933dd62
equal deleted inserted replaced
25753:b73bd85f9068 25754:2fc68d1b7c03
   142         env, provider, &(jvm_provider->nameAttributes));
   142         env, provider, &(jvm_provider->nameAttributes));
   143     readFieldInterfaceAttributes("com/sun/tracing/dtrace/ArgsAttributes",
   143     readFieldInterfaceAttributes("com/sun/tracing/dtrace/ArgsAttributes",
   144         env, provider, &(jvm_provider->argsAttributes));
   144         env, provider, &(jvm_provider->argsAttributes));
   145 }
   145 }
   146 
   146 
   147 static void readProviderData(
   147 static int readProviderData(
   148         JNIEnv* env, jobject provider, JVM_DTraceProvider* jvm_provider) {
   148         JNIEnv* env, jobject provider, JVM_DTraceProvider* jvm_provider) {
   149     jmethodID mid;
   149     jmethodID mid;
   150     jobjectArray probes;
   150     jobjectArray probes;
   151     jsize i;
   151     jsize i;
   152     jclass clazz = (*env)->GetObjectClass(env, provider); CHECK
   152     jclass clazz = (*env)->GetObjectClass(env, provider); CHECK_(0)
   153     mid = (*env)->GetMethodID(
   153     mid = (*env)->GetMethodID(
   154         env, clazz, "getProbes", "()[Lsun/tracing/dtrace/DTraceProbe;"); CHECK
   154         env, clazz, "getProbes", "()[Lsun/tracing/dtrace/DTraceProbe;"); CHECK_(0)
   155     probes = (jobjectArray)(*env)->CallObjectMethod(
   155     probes = (jobjectArray)(*env)->CallObjectMethod(
   156         env, provider, mid); CHECK
   156         env, provider, mid); CHECK_(0)
   157 
   157 
   158     // Fill JVM structure, describing provider
   158     // Fill JVM structure, describing provider
   159     jvm_provider->probe_count = (*env)->GetArrayLength(env, probes); CHECK
   159     jvm_provider->probe_count = (*env)->GetArrayLength(env, probes); CHECK_(0)
   160     jvm_provider->probes = (JVM_DTraceProbe*)calloc(
   160     jvm_provider->probes = (JVM_DTraceProbe*)calloc(
   161         jvm_provider->probe_count, sizeof(*jvm_provider->probes));
   161         jvm_provider->probe_count, sizeof(*jvm_provider->probes));
   162     mid = (*env)->GetMethodID(
   162     mid = (*env)->GetMethodID(
   163         env, clazz, "getProviderName", "()Ljava/lang/String;"); CHECK
   163         env, clazz, "getProviderName", "()Ljava/lang/String;"); CHECK_(0)
   164     jvm_provider->name = (jstring)(*env)->CallObjectMethod(
   164     jvm_provider->name = (jstring)(*env)->CallObjectMethod(
   165         env, provider, mid); CHECK
   165         env, provider, mid); CHECK_(0)
   166 
   166 
   167     readInterfaceAttributes(env, provider, jvm_provider); CHECK
   167     readInterfaceAttributes(env, provider, jvm_provider); CHECK_(0)
   168 
   168 
   169     for (i = 0; i < jvm_provider->probe_count; ++i) {
   169     for (i = 0; i < jvm_provider->probe_count; ++i) {
   170         jobject probe = (*env)->GetObjectArrayElement(env, probes, i); CHECK
   170         jobject probe = (*env)->GetObjectArrayElement(env, probes, i); CHECK_(0)
   171         readProbeData(env, probe, &jvm_provider->probes[i]); CHECK
   171         readProbeData(env, probe, &jvm_provider->probes[i]); CHECK_(0)
   172     }
   172     }
       
   173 
       
   174     return 1;
   173 }
   175 }
   174 
   176 
   175 /*
   177 /*
   176  * Class:     sun_tracing_dtrace_JVM
   178  * Class:     sun_tracing_dtrace_JVM
   177  * Method:    activate0
   179  * Method:    activate0
   193     num_providers = (*env)->GetArrayLength(env, providers); CHECK_(0L)
   195     num_providers = (*env)->GetArrayLength(env, providers); CHECK_(0L)
   194 
   196 
   195     jvm_providers = (JVM_DTraceProvider*)calloc(
   197     jvm_providers = (JVM_DTraceProvider*)calloc(
   196         num_providers, sizeof(*jvm_providers));
   198         num_providers, sizeof(*jvm_providers));
   197 
   199 
   198     for (i = 0; i < num_providers; ++i) {
   200     int count = 0;
   199         JVM_DTraceProvider* p = &(jvm_providers[i]);
   201     for (; count < num_providers; ++count) {
       
   202         JVM_DTraceProvider* p = &(jvm_providers[count]);
   200         jobject provider = (*env)->GetObjectArrayElement(
   203         jobject provider = (*env)->GetObjectArrayElement(
   201             env, providers, i);
   204             env, providers, count);
   202         readProviderData(env, provider, p);
   205         if ((*env)->ExceptionOccurred(env) ||
   203     }
   206             ! readProviderData(env, provider, p)) {
   204 
   207             // got an error, bail out!
   205     handle = jvm_symbols->Activate(
   208             break;
   206         env, JVM_TRACING_DTRACE_VERSION, moduleName,
   209         }
   207         num_providers, jvm_providers);
   210     }
       
   211 
       
   212     if (count == num_providers) {
       
   213         // all providers successfully loaded - get the handle
       
   214         handle = jvm_symbols->Activate(
       
   215             env, JVM_TRACING_DTRACE_VERSION, moduleName,
       
   216             num_providers, jvm_providers);
       
   217     }
   208 
   218 
   209     for (i = 0; i < num_providers; ++i) {
   219     for (i = 0; i < num_providers; ++i) {
   210         JVM_DTraceProvider* p = &(jvm_providers[i]);
   220         JVM_DTraceProvider* p = &(jvm_providers[i]);
   211         free(p->probes);
   221         free(p->probes);
   212     }
   222     }