ios12 beta: root cause of RoboVM hangs/crashes vol3
19 Aug 2018 | bug gc ios12This post continues series of investigations #1 #2). Root case – boehm-gc doesn’t resume all threads it paused during GC_stop_world. Details bellow.
This post continues series of investigations #1 #2). Root case – boehm-gc doesn’t resume all threads it paused during GC_stop_world. Details bellow.
UPDATE: there is a follow up on this topic.
Few days ago I narrowed issue to simple case (check this post) but it didn’t answer why this was happening. Today I had time to digg this rock and find pice of code that cause issue. What has been done:
UPDATE: there is a follow up on this topic.
UPDATE2: there is a follow up on this topic.
libgdx developers got concerned about crashes in ios12 beta and there is an issue about it. I was not able to reproduce it using steps provided by Eric Nondahl as was trying to reproduce it on empty iOS system, and following actions helped much:
These steps resulted in reproducing Eric’s POC. But POC) is quite verbose as packed with different cases:
It a follow up of old story. This case hit me back again. This time during a work on keychain utils for linux/windows port. In general this happens in following code:
PKCS12PfxPduBuilder builder = new PKCS12PfxPduBuilder();
...
PKCS12MacCalculatorBuilder macBuilder = new JcePKCS12MacCalculatorBuilder();
PKCS12PfxPdu pfx = builder.build(macBuilder, "".toCharArray());
and the reason in following:
Just have migrated from Mac Mini to MacPro (4 core xeon model mid 2012) to double number of horses. Just swapped SSD from MacMini into MacPro and it is up and running. Build is almost twice faster now, everything seems to be ok but IntelliJ Idea started working extremely slow. Reinstall OS from scratch but it is pure 1 day wasting. It seemed to me that there is no acceleration enabled and reason is not known for me. Probably switch from Intel GPU to ATI might affect existing system setup. Did find that apple.awt.graphics.UseQuartz=true system properties shall enable Quartz acceleration in Java as it is off by default (?). Quick test in Idea and it solves everything !
To add it:
-Dapple.awt.graphics.UseQuartz=true line there-Xms128m
-Xmx1750m
-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
-Dapple.awt.graphics.UseQuartz=true
Keep working on Keychain utility for linux-windows port, generating the code signing request for particular. And was surprised that openssl was not able to load it CertificateSigningRequest.certSigningRequest built by Apple:
$ openssl req -text -noout -verify -in CertificateSigningRequest.certSigningRequest
unable to load X509 request
140735602271176:error:0D07209B:asn1 encoding routines:ASN1_get_object:too long:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22.50.2/libressl/crypto/asn1/asn1_lib.c:143:
... other complains ...
140735602271176:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22.50.2/libressl/crypto/pem/pem_oth.c:84:
Apple uses different format ? No, it just writes broken ASN.1 stream. Details bellow:
This post continues series of debugger rework, refer to previous post. In general rework is almost complete and changes are being tested now.
Beside variable resolution problem debug of kotlin code suffered from another issue: debugger was jumping random lines when step over collection iteration with lambdas. Why this was happening is bellow:
History Cannot Use Step Filters while Debugging in Eclipse #309
Fix PR315
Eclipse plugin is on low priority and it debugger there was working on simple cases year ago I was checking. Simple debug session discovered the bug in Event request validation.
Problem case there was validation of EXCEPTION_ONLY.referenceTypeID event modifier against list of known to debugger ones, but there is case when it can be zero:
Have completed most of code rework responsible for debug information preparation for debugger and frame local variable resolution during debug.
Soot performs split of local variable into multiple at each assignment and not always it is not always possible to pack them back, as result same java variable could be represented different memory location (at different part of code);Details will be provided in separate post but some facts are bellow:
Spoiler: because Apple uses Penguins to review application in Antarctica! (or just set region to Antarctica)
PR311. Kees van Dieren tried to release app to Apple with RoboVM 2.3.4 and it got rejected. It was crashing due NPE at following:
public DecimalFormatSymbols(Locale locale) {
...
try {
currency = Currency.getInstance(locale);
currencySymbol = currency.getSymbol(locale); // <== here
intlCurrencySymbol = currency.getCurrencyCode();
} catch (IllegalArgumentException e) {
...
}
}
Currency.getInstance() can return null as per spec for countries without currencies, such as Antarctica. Currently icu.dat that is embedded in RoboVM has two counties with XXX currency: AQ, CP.
The fix is simple, to use no currency currency object with code XXX in this case:
--- compiler/rt/libcore/luni/src/main/java/java/text/DecimalFormatSymbols.java (date 1529655383000)
+++ compiler/rt/libcore/luni/src/main/java/java/text/DecimalFormatSymbols.java (date 1529660632000)
@@ -97,6 +97,11 @@
this.locale = locale;
try {
currency = Currency.getInstance(locale);
+ if (currency == null) {
+ // dkimitsa: for some countries there is no currecy like Antarctida AQ so pick currency
+ // directcly by no currency code
+ currency = Currency.getInstance("XXX");
+ }
currencySymbol = currency.getSymbol(locale);
intlCurrencySymbol = currency.getCurrencyCode();
} catch (IllegalArgumentException e) {