[ltt-dev] LTTV BUG: Recent upgrades broke the JNI interface

Alexandre Montplaisir alexandre.montplaisir at polymtl.ca
Wed Sep 8 14:44:50 EDT 2010



On 10-09-08 11:47 AM, Mathieu Desnoyers wrote:
> * Alexandre Montplaisir (alexandre.montplaisir at polymtl.ca) wrote:
>> (It seems LTTV can't let go of me...)
>>
>> I was trying to reinstall TMF, which includes the compilation of LTTV
>> with  "./configure --with-jni-interface". However, make was now getting
>> build errors:
>>
>> jni_interface.c: In function
>> ‘Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getOffset’:
>> jni_interface.c:1005: error: ‘struct marker_field’ has no member named
>> ‘offset’
>> jni_interface.c: In function
>> ‘Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1getSize’:
>> jni_interface.c:1012: error: ‘struct marker_field’ has no member named
>> ‘size’
>> jni_interface.c: In function
>> ‘Java_org_eclipse_linuxtools_lttng_jni_JniMarkerField_ltt_1printMarkerField’:
>> jni_interface.c:1049: error: ‘struct marker_field’ has no member named
>> ‘offset’
>> jni_interface.c:1050: error: ‘struct marker_field’ has no member named
>> ‘size’
>> jni_interface.c: In function
>> ‘Java_org_eclipse_linuxtools_lttng_jni_JniParser_ltt_1getParsedData’:
>> jni_interface.c:1134: error: ‘struct marker_field’ has no member named
>> ‘offset’
>>
>>
>>
>> Me and Michael were getting the same problem. Sun-java,  openjdk  gcj so
>> were all giving the same errors. We ended up doing a git bisect, which
>> gave the following commit as being responsible:
>>
>> 1184dc37d4cee465b9888fcec352c4ebe86d4246 is the first bad commit
>> commit 1184dc37d4cee465b9888fcec352c4ebe86d4246
>> Author: Mathieu Desnoyers<mathieu.desnoyers at polymtl.ca>
>> Date:   Fri Aug 20 12:02:42 2010 -0400
>>
>>      ltt traceread: fix offsets calculation, should be per tracefile
>>
>>      Signed-off-by: Mathieu Desnoyers<mathieu.desnoyers at efficios.com>
>>
>> :040000 040000 b655cf92cab4b1a11f4000e27663426da1e1d1dd
>> 4e660bf0e8d8ad2ff0262e1c3223490d3f400178 M    ltt
>>
>>
>> I'll look into it this afternoon, but I suppose the changes in that
>> commit were made for a reason, so I'm not too confident touching it.
> Yeah, the library should be the only one knowing about the struct marker
> offset/size fields, this is why I renamed them. The problem is that the
> validity of this information is only while a given event is read. As
> soon as the application reads events with same ID in other tracefiles
> belonging to the same trace, it can overwrite the marker fields
> offsets/sizes. This was causing a bug in LTTV.
>
> The application (lttv/tmf) should use the proper interface to access the
> current event fields/offsets: ltt_event_field().

Hmm ok. After some digging in the JNI code (ouch), I found out the above 
2 errors come from simple Get methods that aren't even used anywhere in 
TMF. However, another error comes up because the "->offset" field is 
also used elsewhere in their parser code.

You don't want a patch that makes the JNI functions access 
"marker_field->_offset", do you? I can carry it out-of-tree to restore 
the previous functionality (and compilability (is that a word?)) for 
TMF, until they change their parser methods, since they'll probably get 
hit by the same bug as LTTV.

Cheers,
Alexandre

> Thanks,
>
> Mathieu
>
>> Thanks,
>> Alexandre
>>
>>
>> ps. On a side note, it seems building liblttvtraceread with OpenJDK
>> still works with TMF, so there might be hope for a liblttvtraceread-jni
>> package after all...
>>
>> _______________________________________________
>> ltt-dev mailing list
>> ltt-dev at lists.casi.polymtl.ca
>> http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev




More information about the lttng-dev mailing list