Mejoras de estabilidad del cliente de Steam en Linux
(ttimo.typepad.com)Mejoras de estabilidad del cliente de Steam
-
Contexto: En la actualización del cliente de Steam del 5 de noviembre se corrigieron fallos comunes en Linux. Entre ellos, el cambio con mayor impacto fue la modificación en la forma de usar las funciones
setenvygetenv. -
Problema:
setenves una API insegura en Linux, y puede causar problemas cuando se usa en entornos multihilo. Después de una llamada agetenv, pueden producirse fallos como SIGABRT en otro hilo. -
Solución:
- Se eliminaron la mayoría de las llamadas a
setenvy se refactorizó para pasar el entorno al crear procesos usandoexecvpe. - Se almacenan en caché las llamadas para reducir la dependencia de
getenv. - Para los casos restantes de uso de
setenv, se introdujo un "administrador de entorno" que preasigna al inicio un búfer de valores lo suficientemente grande.
- Se eliminaron la mayoría de las llamadas a
-
Resultado: Estos cambios redujeron de forma importante la frecuencia de aparición de SIGABRT. Sin embargo, no es una solución perfecta, y sigue existiendo riesgo de fallos si bibliotecas externas llaman a
setenv. -
Próximos pasos: En glibc están investigando cómo resolver este problema manteniendo la seguridad asincrónica de señales y sincronizándolo con el uso de
envp. Es un trabajo complejo, pero a largo plazo planean proponer una solución sin apartarse de la especificación POSIX.
1 comentarios
Opiniones en Hacker News
Se está revisando un parche debido a problemas de estabilidad en la pila gráfica de Red Hat
getenvse incluya en glibc 2.41setenvya es más fácil de manejar porque no libera las cadenas del entornounsetenves complicado por problemas de concurrenciagetenves mantener la seguridad ante señales asíncronasvfork+execve, es difícil evitar fugas de memoria, por lo que modificar el manejo del entorno es un tema polémicoAgradecen que Steam funcione bien en Linux
Lo mejor es leer las variables de entorno al arrancar y no usar
setenvgetenv/setenvcomo mecanismo de mensajería IPC puede causar problemasHay dudas sobre si
setenves una API de Linuxsetenvestá definido en POSIX y se implementa en espacio de usuario, no en el kernel de LinuxSe pregunta si realmente hay casos en los que un programa llama a
setenven un hilo y espera el efecto en otro hiloHay un problema en el que Steam se queja de que no hay conexión
Resultan interesantes las observaciones sobre el cliente de Steam y la programación en Linux
Resolver el problema en glibc podría requerir concesiones en funcionalidad
El rendimiento de renderizado del cliente de Steam es malo cuando el mouse está dentro de la ventana
Hay un bug de larga data en el cliente de Steam para Linux