App fallos aleatorios con señal fatal 7 (SIGBUS), código 2 o señal fatal 11 (SIGSEGV), código 1

Contexto

Estoy creando una aplicación que se supone que mostrar algunas imágenes en un Fragment , la mayoría de ellos descargados de Internet.

Estoy usando Glide para manejar esa imagen cargando para mí en mi CardViews y Fresco en mi control deslizante de imagen (Y esta pregunta en SO explica por qué estoy usando dos libs de imágenes).

La parte de Fresco de la lib se basa principalmente en este tenedor de AndroidImageSlider .

Importante: Las imágenes que intento cargar pueden ser PNG o SVG .

Más información: Estoy usando un Moto Maxx (versión internacional del Droid Turbo ) con Android 5.0.2. También sucedió en un Samsung Galaxy S4 con Android 4.4.2 (cyanogen mod), pero sucede mucho menos a menudo.

PS: No estoy usando NDK.

El problema

A veces, mi aplicación sólo se bloquea, de la nada, e incluso sin ninguna interacción del usuario. Y cuando lo hace, estoy recibiendo el siguiente mensaje de error en el logcat:

 Fatal signal 7 (SIGBUS), code 2, fault addr 0x9a74c060 in tid 21894 

Completa pila:

 04-07 07:59:08.110 21894 21894 F libc : Fatal signal 7 (SIGBUS), code 2, fault addr 0x9a74c060 in tid 21894 (asus.saitestore) 04-07 07:59:08.161 21946 21946 E Diag_Lib: Diag_LSM_Init: Failed to open handle to diag driver, error = 2 04-07 07:59:08.263 333 333 I DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 04-07 07:59:08.263 333 333 I DEBUG : Build fingerprint: 'motorola/quark_retbr/quark_umts:5.0.2/LXG22.33-12.16/16:user/release-keys' 04-07 07:59:08.263 333 333 I DEBUG : Revision: 'p4a0' 04-07 07:59:08.263 333 333 I DEBUG : ABI: 'arm' 04-07 07:59:08.263 333 333 I DEBUG : pid: 21894, tid: 21894, name: asus.saitestore >>> org.unasus.saitestore <<< 04-07 07:59:08.264 333 333 I DEBUG : signal 7 (SIGBUS), code 2 (BUS_ADRERR), fault addr 0x9a74c060 04-07 07:59:08.446 333 333 I DEBUG : r0 00000000 r1 bead50cc r2 00000000 r3 9dae4000 04-07 07:59:08.446 333 333 I DEBUG : r4 9dae4000 r5 9a74c060 r6 bead50d4 r7 00000001 04-07 07:59:08.446 333 333 I DEBUG : r8 00063054 r9 00000000 sl 000000fe fp 00000000 04-07 07:59:08.446 333 333 I DEBUG : ip 00000000 sp bead5094 lr b5952d63 pc b5a38426 cpsr 800b0030 04-07 07:59:08.447 333 333 I DEBUG : 04-07 07:59:08.447 333 333 I DEBUG : backtrace: 04-07 07:59:08.447 333 333 I DEBUG : #00 pc 001b2426 /system/lib/libskia.so (S32_opaque_D32_nofilter_DX_neon(SkBitmapProcState const&, unsigned int const*, int, unsigned int*)+141) 04-07 07:59:08.447 333 333 I DEBUG : #01 pc 000ccd61 /system/lib/libskia.so (SkBitmapProcShader::BitmapProcShaderContext::shadeSpan(int, int, unsigned int*, int)+86) 04-07 07:59:08.447 333 333 I DEBUG : #02 pc 000d6cff /system/lib/libskia.so (SkARGB32_Shader_Blitter::blitV(int, int, int, unsigned char)+528) 04-07 07:59:08.447 333 333 I DEBUG : #03 pc 001076c1 /system/lib/libskia.so 04-07 07:59:08.447 333 333 I DEBUG : #04 pc 0010782d /system/lib/libskia.so 04-07 07:59:08.447 333 333 I DEBUG : #05 pc 001078b9 /system/lib/libskia.so 04-07 07:59:08.447 333 333 I DEBUG : #06 pc 00107cf3 /system/lib/libskia.so (SkScan::AntiFillRect(SkRect const&, SkRegion const*, SkBlitter*)+178) 04-07 07:59:08.447 333 333 I DEBUG : #07 pc 0010804b /system/lib/libskia.so (SkScan::AntiFillRect(SkRect const&, SkRasterClip const&, SkBlitter*)+14) 04-07 07:59:08.447 333 333 I DEBUG : #08 pc 000e2031 /system/lib/libskia.so (SkDraw::drawRect(SkRect const&, SkPaint const&) const+252) 04-07 07:59:08.447 333 333 I DEBUG : #09 pc 000e3513 /system/lib/libskia.so (SkDraw::drawBitmap(SkBitmap const&, SkMatrix const&, SkPaint const&) const+276) 04-07 07:59:08.447 333 333 I DEBUG : #10 pc 000db7c5 /system/lib/libskia.so 04-07 07:59:08.447 333 333 I DEBUG : #11 pc 000db8ad /system/lib/libskia.so (SkCanvas::drawBitmap(SkBitmap const&, float, float, SkPaint const*)+116) 04-07 07:59:08.447 333 333 I DEBUG : #12 pc 000f97bb /system/lib/libskia.so (SkPicturePlayback::draw(SkCanvas&, SkDrawPictureCallback*)+1186) 04-07 07:59:08.447 333 333 I DEBUG : #13 pc 000b54c7 /system/framework/arm/boot.oat 04-07 07:59:09.190 333 333 I DEBUG : Tombstone written to: /data/tombstones/tombstone_08 04-07 07:59:09.205 806 828 I BootReceiver: Copying /data/tombstones/tombstone_08 to DropBox (SYSTEM_TOMBSTONE) 

Una vez, también me dio un mensaje de error diferente:

 Fatal signal 11 (SIGSEGV), code 1, fault addr 0x9abe300c in tid 30052 

Y la pila completa:

 04-04 15:41:34.059: A/libc(30052): Fatal signal 11 (SIGSEGV), code 1, fault addr 0x9abe300c in tid 30052 (asus.saitestore) 04-04 15:41:34.161: I/DEBUG(28994): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 04-04 15:41:34.161: I/DEBUG(28994): Build fingerprint: 'motorola/quark_retbr/quark_umts:5.0.2/LXG22.33-12.16/16:user/release-keys' 04-04 15:41:34.161: I/DEBUG(28994): Revision: 'p4a0' 04-04 15:41:34.161: I/DEBUG(28994): ABI: 'arm' 04-04 15:41:34.161: I/DEBUG(28994): pid: 30052, tid: 30052, name: asus.saitestore >>> org.unasus.saitestore <<< 04-04 15:41:34.161: I/DEBUG(28994): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x9abe300c 04-04 15:41:34.177: I/DEBUG(28994): r0 00000000 r1 bede70a4 r2 00000000 r3 9ce89000 04-04 15:41:34.178: I/DEBUG(28994): r4 9ce89000 r5 9abe300c r6 bede70ac r7 00000001 04-04 15:41:34.178: I/DEBUG(28994): r8 00000000 r9 00000000 sl 000000fe fp 00000000 04-04 15:41:34.178: I/DEBUG(28994): ip 00000000 sp bede706c lr b5992d63 pc b5a78426 cpsr 800b0030 04-04 15:41:34.178: I/DEBUG(28994): backtrace: 04-04 15:41:34.178: I/DEBUG(28994): #00 pc 001b2426 /system/lib/libskia.so (S32_opaque_D32_nofilter_DX_neon(SkBitmapProcState const&, unsigned int const*, int, unsigned int*)+141) 04-04 15:41:34.178: I/DEBUG(28994): #01 pc 000ccd61 /system/lib/libskia.so (SkBitmapProcShader::BitmapProcShaderContext::shadeSpan(int, int, unsigned int*, int)+86) 04-04 15:41:34.178: I/DEBUG(28994): #02 pc 000d6cff /system/lib/libskia.so (SkARGB32_Shader_Blitter::blitV(int, int, int, unsigned char)+528) 04-04 15:41:34.178: I/DEBUG(28994): #03 pc 0010721d /system/lib/libskia.so 04-04 15:41:34.178: I/DEBUG(28994): #04 pc 00107669 /system/lib/libskia.so 04-04 15:41:34.178: I/DEBUG(28994): #05 pc 0010782d /system/lib/libskia.so 04-04 15:41:34.178: I/DEBUG(28994): #06 pc 001078b9 /system/lib/libskia.so 04-04 15:41:34.178: I/DEBUG(28994): #07 pc 00107cf3 /system/lib/libskia.so (SkScan::AntiFillRect(SkRect const&, SkRegion const*, SkBlitter*)+178) 04-04 15:41:34.179: I/DEBUG(28994): #08 pc 0010804b /system/lib/libskia.so (SkScan::AntiFillRect(SkRect const&, SkRasterClip const&, SkBlitter*)+14) 04-04 15:41:34.179: I/DEBUG(28994): #09 pc 000e2031 /system/lib/libskia.so (SkDraw::drawRect(SkRect const&, SkPaint const&) const+252) 04-04 15:41:34.179: I/DEBUG(28994): #10 pc 000e3513 /system/lib/libskia.so (SkDraw::drawBitmap(SkBitmap const&, SkMatrix const&, SkPaint const&) const+276) 04-04 15:41:34.179: I/DEBUG(28994): #11 pc 000db7c5 /system/lib/libskia.so 04-04 15:41:34.179: I/DEBUG(28994): #12 pc 000db8ad /system/lib/libskia.so (SkCanvas::drawBitmap(SkBitmap const&, float, float, SkPaint const*)+116) 04-04 15:41:34.179: I/DEBUG(28994): #13 pc 000f97bb /system/lib/libskia.so (SkPicturePlayback::draw(SkCanvas&, SkDrawPictureCallback*)+1186) 04-04 15:41:34.179: I/DEBUG(28994): #14 pc 000b54c7 /system/framework/arm/boot.oat 04-04 15:41:34.820: I/DEBUG(28994): Tombstone written to: /data/tombstones/tombstone_07 04-04 15:41:34.821: I/BootReceiver(1989): Copying /data/tombstones/tombstone_07 to DropBox (SYSTEM_TOMBSTONE) 

EDIT: También sucedió en un Samsung Galaxy S4, piedra sepulcral se puede encontrar aquí .

Cómo estoy cargando las imágenes

Dentro de mi CardAdapter , estoy cargando las imágenes como esta (la parte SVG fue tomada de aquí ):

 if (mod.getImg_type() == ImageTypes.SVG) { GenericRequestBuilder<Uri, InputStream, SVG, PictureDrawable> requestBuilder; SVGDecoder decoder = new SVGDecoder(PreserveAspectRatio.STRETCH); requestBuilder = Glide.with(mContext) .using(Glide.buildStreamModelLoader(Uri.class, mContext), InputStream.class) .from(Uri.class) .as(SVG.class) .transcode(new SvgDrawableTranscoder(), PictureDrawable.class) .sourceEncoder(new StreamEncoder()) .cacheDecoder(new FileToStreamDecoder<>(decoder)) .decoder(decoder) .placeholder(R.drawable.modulo) .error(R.drawable.banner_error) .animate(android.R.anim.fade_in) .listener(new SvgSoftwareLayerSetter<Uri>()); requestBuilder .diskCacheStrategy(DiskCacheStrategy.SOURCE) .load(Uri.parse(mod.getUrl_icon())) .into(cardHolder.iv_card); } else { Glide.with(mContext) .load(mod.getUrl_icon()) .placeholder(R.drawable.modulo) .error(R.drawable.banner_error) .centerCrop() .crossFade() .into(cardHolder.iv_card); } 

Y el archivo XML ve así:

 <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/card_view" android:layout_width="@dimen/card_w" android:layout_height="@dimen/card_h" android:layout_margin="5dp" android:stateListAnimator="@anim/raise" card_view:cardCornerRadius="0dp" android:foreground="?android:attr/selectableItemBackground"> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/rl_card"> <ImageView android:layout_width="@dimen/card_image_w" android:layout_height="@dimen/card_image_h" android:layout_centerHorizontal="true" android:scaleType="fitXY" android:id="@+id/iv_card" android:src="@drawable/modulo" android:layout_margin="@dimen/spacing_medium" /> <TextView android:id="@+id/tv_card" android:layout_width="@dimen/card_text_w" android:layout_height="@dimen/card_text_h" android:maxHeight="@dimen/card_text_h" android:maxWidth="@dimen/card_text_w" android:layout_below="@+id/iv_card" android:layout_centerHorizontal="true" android:ellipsize="end" android:maxLines="1" android:singleLine="true" android:text="Bacon ipsum dolor amet duis short ribs nostrud esse tempor." android:textSize="12sp" android:gravity="center_horizontal" android:layout_marginLeft="@dimen/spacing_medium" android:layout_marginRight="@dimen/spacing_medium" /> <View android:id="@+id/card_check" android:layout_width="match_parent" android:layout_height="@dimen/card_check_h" android:maxHeight="@dimen/card_check_h" android:layout_below="@+id/tv_card" android:background="@color/primary_light" android:layout_alignParentBottom="true" /> </RelativeLayout> </android.support.v7.widget.CardView> 

¿Qué he encontrado hasta ahora

He encontrado algunas preguntas aquí en SO, pero ninguno de ellos realmente ayudó con mi problema. Y es un poco difícil reproducirlo. A veces la aplicación no se bloquea en absoluto, incluso después de 30 minutos en la pantalla defectuosa. Por otro lado, sucedió justo después de que se mostraran las imágenes.

Algunas preguntas que he encontrado:

  • ¿Qué significa exactamente "Señal fatal 7 (SIGBUS) en 0x5937abd0 (código = 2)" en la plataforma Android?
  • Señal fatal 7 (SIGBUS) en 0x00000000 (código = 2)
  • Android Fatal Signal 7 (SIGBUS)
  • SEÑAL FATAL 11 (Sigsegv) en 0x00000000 (código = 1)?
  • No se puede capturar Java (Android) Excepción con try-catch, createBitmap

Y muchos otros…

Y aquí hay una captura de pantalla de la aplicación, tomada del informe de errores generado por mi teléfono:

captura de pantalla

He visto en algunos lugares que este problema podría estar relacionado con la memoria baja. Pero creo que es poco probable, ya que mi teléfono tiene 3 GB o RAM, y estoy cargando menos imágenes en comparación con la aplicación de galería nativa (que no se estrella en mi teléfono).

Por otro lado, el hilo en el tracker de tema skia sugiere que está relacionado con el SVG lib.

Actualización: he encontrado este enlace en el rastreador de problemas de Android, y este en el rastreador de temas skia, que es más probable que se relaciona con el problema.

Otra actualización: he eliminado el control deslizante, y la aplicación dejó de estrellarse. Supongo que el problema está ahí.

Otra actualización : He cambiado el control deslizante para cargar sólo PNG o sólo SVG en un momento dado. La aplicación sólo se bloqueó al cargar las imágenes SVG . Así que tal vez el problema está en el SVG lib .

También se bloquea la carga del SVG de un archivo.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.