in reply to Re^4: Sharing XS object?
in thread Sharing XS object?

If this is possible--I've never done it, mostly because I've never seen a need for it--then success will resolve around using the bless() function exported from threads::shared rather than the built-in version.

Whilst it is possible to gain access to threads::shared::bless() from within your XS code, the simplest method to test whether it will actually work for you, would be to export the RV (RETVAL) from your XS new() (perhaps renamed _new()) un-blessed; and then add a wrapper method in the .pm file that calls the XS _new() and then applies the modified bless() (imported from threads::shared) at the Perl level before returning it.

That should get you past the "Invalid value for shared scalar" problem. I do not expect it to be a complete solution. You will almost certainly have to add a CLONE() method to the package. And you will need to deal with the problem of multiple DESTROY()s. But one step at a time.

If you module isn't proprietary, and doesn't have a raft of dependancies, and you were prepared to let me have an installable copy, it might make solving the knock on problems quicker.


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^6: Sharing XS object?
by menth0l (Monk) on Mar 10, 2011 at 07:36 UTC
    Hi, I don't mind to release code to the public since it's based on Tree-Ternary_XS code (you can still see it in POD in BK_XS.pm:) and includes Text-LevenshteinXS anyway.

    Here is a link to source code .rar package

    I would be appreciated if u could look at it and give me a help with this problem. PS. I no expert in C (last time i used it was in college;) nor in XS so please, be understanding while reading the code :)