On Mon, Jun 8, 2020 at 10:44 AM Viktor Kojouharov <vkojouha...@gmail.com> wrote:
>
> The full code can be seen in this diff:
>
> https://github.com/urandom/go/commit/d10ccdd907dac690bfcb31df1115ce1508775458
>
> The just of it is, I've added an extra field to a struct (the chan) of type 
> unsafe.Pointer. The value is then copied (allegedly) to a target pointer in 
> chanrecv using typedmemmove. The types of both pointers are the same, as 
> defined by the chan's elemtype

I only took a quick look, but it looks like you have added a pointer
field to hchan, and presumably the garbage collector needs to know
about that pointer.  If you look at makechan in runtime/chan.go, you
will see that a channel whose element type does not contain any
pointers is allocated in such a way that the garbage collector never
looks at it.  That will break with your new pointer, as the collector
can collect the value to which the new pointer points without changing
that pointer.

Ian



> On Monday, June 8, 2020 at 3:12:18 AM UTC+3, keith....@gmail.com wrote:
>>
>> Showing us some code would really help. It's hard to understand what you are 
>> doing from this brief description. Also, where does the SIGBUS occur? What 
>> pc, and what address?
>>
>> What types are you passing as the first argument to typedmemmove? Where did 
>> you get them from?
>>
>> This is a fine question for golang-dev, but don't expect a whole lot of help 
>> - reaching into the runtime to call typedmemmove is very unsupported.
>>
>> On Sunday, June 7, 2020 at 10:02:21 AM UTC-7, Michael Jones wrote:
>>>
>>> Thank you. I now officially know that I don’t understand. Sorry.
>>>
>>> On Sun, Jun 7, 2020 at 7:54 AM Viktor Kojouharov <vkojo...@gmail.com> wrote:
>>>>
>>>> The pointer is being copied via typedmemmove, which itself calls memmove, 
>>>> which, according to its documentation, copies bytes from the source to the 
>>>> destination. Not sure why that would be impossible, considering it does 
>>>> work for some code (the source pointer preserves its data)
>>>>
>>>> Not sure what you mean by "copied via unsafe". Also, the source pointer 
>>>> never goes out of scope. It's part of a struct that is passed to the 
>>>> function that calls typedmemmove, and its lifetime is more or less static. 
>>>> So while the destination pointers go out of scope, the source one never 
>>>> does.
>>>>
>>>>
>>>> On Sunday, June 7, 2020 at 4:45:40 PM UTC+3, Michael Jones wrote:
>>>>>
>>>>> Do you mean that you have a problem with the value of the pointer? That 
>>>>> is "copying the pointer." This seems impossible.
>>>>>
>>>>> Attempting to access through a pointer copied via unsafe is (generally) 
>>>>> inviting doom, and seems highly possible. The instant the last pointer to 
>>>>> that data goes out of scope the address range occupied by the formerly 
>>>>> pointed to items is formally inaccessible. Using unsafe to keep a shadow 
>>>>> copy of the address and then poking around is quite likely to fail, and 
>>>>> even when it does not, it is quite likely to be meaningless. (random data 
>>>>> from some other use).
>>>>>
>>>>> If I misunderstood, please forgive me.
>>>>>
>>>>> On Sun, Jun 7, 2020 at 6:15 AM Viktor Kojouharov <vkojo...@gmail.com> 
>>>>> wrote:
>>>>>>
>>>>>> p.s. should such questions be posted in golang-dev, since it deals with 
>>>>>> runtime internals?
>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google 
>>>>>> Groups "golang-nuts" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>>>> an email to golan...@googlegroups.com.
>>>>>> To view this discussion on the web visit 
>>>>>> https://groups.google.com/d/msgid/golang-nuts/71d7fb5c-3ef5-4611-b9ce-299f7b90945eo%40googlegroups.com.
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Michael T. Jones
>>>>> michae...@gmail.com
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google Groups 
>>>> "golang-nuts" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>>> email to golan...@googlegroups.com.
>>>> To view this discussion on the web visit 
>>>> https://groups.google.com/d/msgid/golang-nuts/fa18bf7e-8965-4917-9d81-00a8f43289c3o%40googlegroups.com.
>>>
>>> --
>>> Michael T. Jones
>>> michae...@gmail.com
>
> --
> You received this message because you are subscribed to the Google Groups 
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to golang-nuts+unsubscr...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/golang-nuts/aa037e65-0e2a-47d6-b35c-8e80fc3a8000o%40googlegroups.com.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAOyqgcVMp9UnD3Rkn7KkqL1R_PaLQcsOXLXQ9TGABAvGDYqtaA%40mail.gmail.com.

Reply via email to