[SP-pm] destruir um objeto e die
Otávio Fernandes
otaviof at gmail.com
Mon Dec 15 16:39:30 PST 2008
2008/12/15 Frederico Recsky <frederico em gmail.com>:
> Sim, isso faz com que o die saia com o erro valor 255 :) e desmonte as
> coisas. Porem meu destrutor fica vazio, e quando o programa precisa
> sair normalmente preciso dele. Se o destrutor contem o umount também,
> ele continua saindo com zero.
Humm, entendi. Você não poderia fazer algo assim?
BEGIN { $SIG{__DIE__} = \&umount_volumes(); }
sub umount_volumes {
# desmontandos os volumes X, Y e Z
exit 1;
}
Talvez até chamar o seu destrutor ai dentro e nele ter uma opção (ou
mesmo default, já que ele veio de um SIGDIE) para ter um "exit 1;".
> A saida, até meio pog. foi colocar uma flag no handler do sig die, e
> depois com um END assim:
>
> END {
> $? = 1 if $die;
> }
>
> sub umount_volumes {
> $die = 1;
> }
É uma alternativa viável, porem, você dá uma volta a mais em um
problema que poderia ser resolvido dentro da rotina que parece ser
mais lógica para este problema, quando isso acontece, cabem bons
comentários indicando o que você estava pensando no momento desta
solução. Se você encontrar uma solução mais simples, lembre-se do
Débito Técnico, sempre.
> Isso "arruma" a saida do processo mesmo quando o DESTROY coloca ela em
> zero. Interessante que o handler do die é executado antes do Destroy e
> que qualquer fork executado no destroy joga seu status como saida do
> programa principal, ao meu ver isso é um bug.
O comportamento do DESTROY me parece muito normal, a princípio. Para
saber se é um bug, será necessário ver a sua implementação ;-), estou
curioso.
(...)
um abraço,
Otávio Fernandes <otaviof at gmail.com>
http://otaviof.blogspot.com/
More information about the SaoPaulo-pm
mailing list