[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