in reply to Threads and object access

Fever, I've already tried that route but unfortunately threads::shared doesn't support bless'd items.

Using the second option:

use threads::shared; $HS = new Something(); share($HS);
Causes the reference to become fubar'd:

$VAR1 = \bless( {}, 'Win32::OLE' );

-Nitrox

Replies are listed 'Best First'.
Re: Re: Threads and object access
by djantzen (Priest) on Dec 11, 2002 at 19:50 UTC

    Ah, now I see it under the "Bugs" section in the docs: "bless is not supported on shared references. In the current version, bless will only bless the thread local reference and the blessing will not propagate to the other threads. This is expected to be implemented in a future version of Perl."

    What happens if you manually (re)bless the reference in each of the threads? Of course this is contingent upon it being possible that the reference itself (e.g., your Win32::OLE=HASH(0x437c94c)) can be shared, even though it is no longer associated with the package Win32::OLE.

    Update: I think I misunderstood the bug report. I believe it's referring to blessing after the variable has been created and shared; hence the phrase "blessing will not propagate". In some test code I'm successfully sharing blessed objects between threads, so I don't know why your Win32::OLE object is getting wiped out when you share it. How about posting some code?