[ NemesisRD 1.x ] NemesisRD.tools 1.11.3 - Soluciona el BUG por el que podía causar interbloqueos al incrementar/grabar contadores.

0 views
Skip to first unread message

Cisco

unread,
Apr 21, 2010, 1:43:31 AM4/21/10
to NemesisRD 1.x
Soluciona el BUG por el que podía causar interbloqueos al incrementar/
grabar contadores.

El problema fue detectado con el SyONE.xtrace con el proceso test.ss/
sdp.ss/sdp_server.p estableciendo un
periodo de grabación de contadores de 2 segundos.

[0x7fbfffea90]: timex::TimeController | Callers:
timex::TimeController::activate [2],timex::TimeController::tick [69]
[0x79bf60, 2]: tools::CounterManager | Callers:
MyInterface::receive [4],nemesis::tools::CounterManager::record [2]
[0x7fbfffea90, 2]: timex::TimeController | Callers:
timex::TimeController::activate [2],timex::TimeController::tick [69]
------ Loop detected [ Level=2 | Loop: 3 ] -------

En el interbloqueo están implicados el ámbito del contador (AACC) a
incrementar y el control de temporización (TT).

El problema surgía porque cuando se incrementa un contador la
secuencia de bloqueo era AACC, y es posible que hubiera que activar el
contador de grabacion, por tanto, se podría dar la secuencia de
bloqueo (AACC, TT).

Por otro lado siempre que caduda un temporizador se bloquea TT antes
de invocar al 'expire', que en este caso bloqueará todos y cada uno de
los ámbitos y los trafiere al disco => se da la secuencia de bloqueo
(TT, AACC).

Bloquear los recursos en orden distinto nos asegura que en un tiempo
finito el proceso quedará bloqueado.

Para soluciona el problema se va a mejorar la implementación de
tools::ScopeCounter::Safe para que asegure el orde correcto (TT,
AACC).

./tools.CounterScope.cc | Locally Modified | 1.8
./tools.CounterManager.cc | Locally Modified | 1.9
./hdrs/nemesis.tools.CounterManager.h | Locally Modified | 1.11
./hdrs/nemesis.tools.CounterScope.h | Locally Modified | 1.9
./internal.db/tools.sccs.cc | Locally Modified | 1.22
./what_news/1.11.3.version | Locally Added | New file!

--
Has recibido este mensaje porque estás suscrito al grupo "NemesisRD 1.x" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a nemesi...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a nemesisrd-1x...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/nemesisrd-1x?hl=es.

Cisco

unread,
Jun 15, 2010, 5:31:29 AM6/15/10
to NemesisRD 1.x

El método tools::Counter::increment estará protegido, así que si hay
que acceder a él habrá que implementar un código similar a:

tools::CounterScope& ccss = toosl::CounterManager::instantiate ().find
(<nº de scope>);
tools::CounterScope::Safe safe (<timex::Engine>, ccss, "Texto sólo
para local7");
safe.increment (<nº de contador>, <cantidad>);

Dónde <timex::Engine> será la instancia del gestor de tiempos usado en
nuestra aplicación.

Cisco

unread,
Jun 15, 2010, 5:48:01 AM6/15/10
to NemesisRD 1.x
La mejor solución es invocar al método estático de
tools::CounterManager::count que implementa los detalles referentes al
orden correcto del bloque de instancias implicadas.
Reply all
Reply to author
Forward
0 new messages