Closed
Bug 525342
Opened 14 years ago
Closed 14 years ago
IPDL: Fix destructors
Categories
(Core :: IPC, defect)
Core
IPC
Tracking
()
RESOLVED
FIXED
People
(Reporter: cjones, Assigned: cjones)
References
Details
Attachments
(1 file, 2 obsolete files)
124.96 KB,
patch
|
Details | Diff | Splinter Review |
They're broken. See the "Simultaneous destructors" thread on m.d.t.dom for the full discussion.
Assignee | ||
Comment 1•14 years ago
|
||
Assignee | ||
Comment 2•14 years ago
|
||
Unfortunately implementing this new scheme introduces a circular manager/managed dependency. I looked into hacky workarounds, but couldn't find anything simple enough to make it more attractive than fixing bug 525172.
Depends on: 525172
Assignee | ||
Comment 3•14 years ago
|
||
I got the fix for this bug finished up tonight, but when applying on top of bug 525172 I got a really nasty ugly error (the patch I wrote for this bug on top of 524172 was "ignored" by hg). Will fix sometime in the near future.
Assignee | ||
Comment 4•14 years ago
|
||
There's a fair amount of crud in this patch, but the essential part is manager->SendFooDestructor(foo) ==> Foo::Sendelete(foo) manager->RecvFooDestructor() ==> foo->Recvdelete() DeallocFoo(foo, ...) ==> DeallocFoo(foo) r? to bent and bsmedberg, as this is a rather invasive change.
Attachment #412138 -
Attachment is obsolete: true
Attachment #412445 -
Flags: review?(bent.mozilla)
Assignee | ||
Updated•14 years ago
|
Attachment #412445 -
Flags: review?(benjamin)
Comment 5•14 years ago
|
||
Comment on attachment 412445 [details] [diff] [review] v1 There are a few general style nits: I'm not happy with the delete() name... it seems like it would conflict too easily with a non-special message name. If we want to avoid confusion with C++ (and therefore ~PProtocolName), perhaps something like __delete__ from python? In any case, let's use Delete() instead of delete()... the unwritten IPDL style guide has decided that UpperCase message names are standard. There are a couple cases where operators like -> are at the beginning of the line instead of the end of the line. Also, a couple places do static_cast<Foo*>(something)->Method( param, param2); In general I'd prefer these to be: static_cast<Foo*>(something)-> Method(param, param2); because it's hard for me to read the opening paren and the first argument on the next line
Attachment #412445 -
Flags: review?(benjamin) → review+
Assignee | ||
Comment 6•14 years ago
|
||
(In reply to comment #5) > (From update of attachment 412445 [details] [diff] [review]) > There are a few general style nits: I'm not happy with the delete() name... it > seems like it would conflict too easily with a non-special message name. What do you mean? Like if someone created a |Delete()| message? > If we > want to avoid confusion with C++ (and therefore ~PProtocolName), perhaps > something like __delete__ from python? In any case, let's use Delete() instead > of delete()... the unwritten IPDL style guide has decided that UpperCase > message names are standard. > Yeah, I kind of like __delete__ ... No need to automagically title-case that either, since it wouldn't look raunchy like Senddelete() does (Send__delete__()).
Assignee | ||
Comment 7•14 years ago
|
||
Attachment #412445 -
Attachment is obsolete: true
Attachment #412445 -
Flags: review?(bent.mozilla)
Assignee | ||
Comment 9•14 years ago
|
||
Pushed http://hg.mozilla.org/projects/electrolysis/rev/5160e99545e9
Status: NEW → RESOLVED
Closed: 14 years ago
Resolution: --- → FIXED
Comment 10•14 years ago
|
||
cjones: Any particular reason why you chose to use "static Send__delete(pActor)" instead of just making this a member function, i.e. "pActor->Send_delete"?
Assignee | ||
Comment 11•14 years ago
|
||
Two reasons: first, it feels weird to me to make a method call that results in the instance being deleted (but yes, this can happen other ways with RPC). If it were The Mozilla Way, I would have made the signature Send__delete__(Foo**) and null'd out the pointer. Second, I suspect without evidence that Send__delete__() would be invoked on more null and already-deleted pointers than other message methods, so having __delete__ be a static function means we invoke __delete__ without reading the instance's vtable pointer and can then give a better error message than "crash" if the pointer is indeed invalid. But I'm not particularly wedded to this design. Do you have a use case for which you'd prefer Send__delete__() to be a method call?
Assignee | ||
Comment 12•14 years ago
|
||
(In reply to comment #11) > Second, I suspect without evidence that > Send__delete__() would be invoked on more null and already-deleted pointers > than other message methods, so having __delete__ be a static function means we > invoke __delete__ without reading the instance's vtable pointer and can then > give a better error message than "crash" if the pointer is indeed invalid. > Actually, duh, Send__delete__() as a instance method wouldn't be virtual, so this point is bogus :S.
You need to log in
before you can comment on or make changes to this bug.
Description
•