ruby-concurrency / ruby-concurrency/concurrent-ruby
DaemonThreadFactory creating new Java thread factory each time it creates a new thread
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Ruby
- Estrellas
- 5.8k
- Forks
- 420
- Merge medio
- 20 h 45 min
- PR fusionados (30 d)
- 4
Descripción
Background Info
- Ruby implementation: JRuby
concurrent-rubyversion:>= 1.1.10, earlier versions may be affected as wellconcurrent-ruby-extinstalled: noconcurrent-ruby-edgeused: no
Issue
Concurrent::DaemonThreadFactory#newThread calls defaultThreadFactory() each time it generates a new thread, which creates a new Java ThreadFactory object each time. This is clearly at odds with intended ThreadFactory usage and is (potentially) problematic in a few ways:
- It leads to thread names of the form
pool-X-thread-Y, where Y is always 1 while X is different for each thread. This is confusing as it suggests that the Concurrent Ruby thread pool is not actually pooling and reusing threads. - This does not seem to be happening in the Concurrent Ruby code, but if a reference to each
ThreadFactoryinstance is retained somewhere, the result will be a memory leak. - Threads created by a
ThreadFactoryinstance normally belong to the same Java thread group, which has permissions implications and may cause errors in code that expects all the threads in a Concurrent Ruby thread pool to belong to the same Java thread group.
Proposed Solution
Call defaultThreadFactory() once in Concurrent::DaemonThreadFactory#initialize, store the resulting factory in an instance variable, and reuse it as needed in Concurrent::DaemonThreadFactory#newThread.
Happy to create a PR with the fix if this seems like an acceptable solution.
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Search for Concurrent::DaemonThreadFactory and read its initialize and newThread methods, along with the use of defaultThreadFactory(). Reuse one Java ThreadFactory for the instance as proposed, then verify that threads created by the factory use incrementing thread numbers and share the intended thread factory and group.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- java, ruby
- Área
- backend
- Tipo de issue
- Error
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Estado de actividad
- Estancado
- Claridad
- Bien especificado
- Aptitud para principiantes
- 45/100