Yes, as it says at the top of type-handlers.cpp, we have to clean up many uses of cleanup() in the marshallers. <br><br>Thanks,<br>Michael<br><br><div class="gmail_quote">On Fri, Nov 20, 2009 at 10:21 AM, Justin Talbot <span dir="ltr">&lt;<a href="mailto:justintalbot@gmail.com">justintalbot@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Works for me.<br>
<br>
This change takes out the checks in marshal_QString and<br>
marshal_QByteArray that were causing my crash. Is this safe to do now?<br>
<br>
Index: qtbase/src/type-handlers.cpp<br>
===================================================================<br>
--- qtbase/src/type-handlers.cpp        (revision 200)<br>
+++ qtbase/src/type-handlers.cpp        (working copy)<br>
@@ -449,7 +449,7 @@<br>
         } else {<br>
           m-&gt;setSexp(qstring2sexp(*s));<br>
         }<br>
-        if(m-&gt;cleanup() || m-&gt;type().isStack() ) {<br>
+        if(m-&gt;cleanup()) {<br>
           delete s;<br>
         }<br>
       } else {<br>
@@ -505,7 +505,7 @@<br>
         } else {<br>
           m-&gt;setSexp(rstringFromQByteArray(s));<br>
         }<br>
-        if(m-&gt;cleanup() || m-&gt;type().isStack() ) {<br>
+        if(m-&gt;cleanup()) {<br>
           delete s;<br>
         }<br>
       } else {<br>
<div><div></div><div class="h5"><br>
<br>
On Fri, Nov 20, 2009 at 7:18 AM, Michael Lawrence &lt;<a href="mailto:lawremi@gmail.com">lawremi@gmail.com</a>&gt; wrote:<br>
&gt; This bug should now be fixed. Let me know if it works for you, Deepayan.<br>
&gt;<br>
&gt; On Thu, Nov 19, 2009 at 10:01 AM, Michael Lawrence &lt;<a href="mailto:lawremi@gmail.com">lawremi@gmail.com</a>&gt;<br>
&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Thu, Nov 19, 2009 at 9:22 AM, Justin Talbot &lt;<a href="mailto:justintalbot@gmail.com">justintalbot@gmail.com</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On Thu, Nov 19, 2009 at 8:54 AM, Michael Lawrence &lt;<a href="mailto:lawremi@gmail.com">lawremi@gmail.com</a>&gt;<br>
&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; On Thu, Nov 19, 2009 at 4:15 AM, Deepayan Sarkar<br>
&gt;&gt;&gt; &gt; &lt;<a href="mailto:deepayan.sarkar@gmail.com">deepayan.sarkar@gmail.com</a>&gt;<br>
&gt;&gt;&gt; &gt; wrote:<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; On Wed, Nov 18, 2009 at 2:49 PM, Deepayan Sarkar<br>
&gt;&gt;&gt; &gt;&gt; &lt;<a href="mailto:deepayan.sarkar@gmail.com">deepayan.sarkar@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt; &gt;&gt; &gt; On Wed, Nov 18, 2009 at 1:46 PM, Deepayan Sarkar<br>
&gt;&gt;&gt; &gt;&gt; &gt; &lt;<a href="mailto:deepayan.sarkar@gmail.com">deepayan.sarkar@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; Any idea what&#39;s going wrong here?<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; ### Just code:<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; library(qtbase)<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; gscene &lt;- Qt$QGraphicsScene()<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; rtxt &lt;- gscene$addText(&quot;some text&quot;)<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; rtxt<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; (rtxt$toPlainText()) ## fine<br>
&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt; And as a confirmation that the &lt;QList&gt; thing is not a problem, I<br>
&gt;&gt;&gt; &gt;&gt; &gt; get:<br>
&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; item0 &lt;- gscene$itemAt(0, 0)<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; item0<br>
&gt;&gt;&gt; &gt;&gt; &gt; &lt;environment: 0x9e21428&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt; attr(,&quot;class&quot;)<br>
&gt;&gt;&gt; &gt;&gt; &gt; [1] &quot;QGraphicsTextItem&quot;   &quot;QObject&quot;             &quot;QGraphicsItem&quot;<br>
&gt;&gt;&gt; &gt;&gt; &gt; [4] &quot;UserDefinedDatabase&quot; &quot;environment&quot;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; item0$toPlainText()<br>
&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;  *** caught segfault ***<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; Other QGraphicsItem-s seem fine, so it must be the multiple<br>
&gt;&gt;&gt; &gt;&gt; inheritance (QObject+QGraphicsItem) problem of  QGraphicsTextItem<br>
&gt;&gt;&gt; &gt;&gt; again. Given that rtxt works but item0 doesn&#39;t, maybe it&#39;s a coercion<br>
&gt;&gt;&gt; &gt;&gt; problem somewhere in the wrapping stage?<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; Everything method invocation fails with item0. The weird thing is that<br>
&gt;&gt;&gt; &gt; the<br>
&gt;&gt;&gt; &gt; environments are different. Every C++ pointer should have the same<br>
&gt;&gt;&gt; &gt; environment, and this holds true for the other QGraphicsItem types.<br>
&gt;&gt;&gt; &gt; This<br>
&gt;&gt;&gt; &gt; indicates that the pointer being returned by itemAt() and items() is<br>
&gt;&gt;&gt; &gt; incorrect.<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; Just checked it, and it looks like the pointer retrieved by e.g.<br>
&gt;&gt;&gt; &gt; itemAt()<br>
&gt;&gt;&gt; &gt; points 8 bytes higher than the one from addText(). This happens at the<br>
&gt;&gt;&gt; &gt; Smoke<br>
&gt;&gt;&gt; &gt; level, but looking at their wrappers reveals nothing. Yes, they are<br>
&gt;&gt;&gt; &gt; casting<br>
&gt;&gt;&gt; &gt; to different types, (QGraphicsTextItem *) vs (QGraphicsItem *), but<br>
&gt;&gt;&gt; &gt; that<br>
&gt;&gt;&gt; &gt; shouldn&#39;t change the value of the pointer, should it? The same error<br>
&gt;&gt;&gt; &gt; happens<br>
&gt;&gt;&gt; &gt; for addWidget() and its QGraphicsProxyWidget return value. So yes it<br>
&gt;&gt;&gt; &gt; seems<br>
&gt;&gt;&gt; &gt; like a multiple inheritance issue, but I don&#39;t understand how a simple<br>
&gt;&gt;&gt; &gt; cast<br>
&gt;&gt;&gt; &gt; could cause this. Maybe it&#39;s just another C++ surprise?<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; -Deepayan<br>
&gt;&gt;&gt; &gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; &gt;&gt; Qtinterfaces-devel mailing list<br>
&gt;&gt;&gt; &gt;&gt; <a href="mailto:Qtinterfaces-devel@lists.r-forge.r-project.org">Qtinterfaces-devel@lists.r-forge.r-project.org</a><br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; <a href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/qtinterfaces-devel" target="_blank">https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/qtinterfaces-devel</a><br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; _______________________________________________<br>
&gt;&gt;&gt; &gt; Qtinterfaces-devel mailing list<br>
&gt;&gt;&gt; &gt; <a href="mailto:Qtinterfaces-devel@lists.r-forge.r-project.org">Qtinterfaces-devel@lists.r-forge.r-project.org</a><br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; <a href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/qtinterfaces-devel" target="_blank">https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/qtinterfaces-devel</a><br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; I haven&#39;t looked at this problem, but casting can change the pointer&#39;s<br>
&gt;&gt;&gt; value in C++ when there&#39;s multiple inheritance. This is due to C++&#39;s<br>
&gt;&gt;&gt; virtual function table mechanism for inheritance. For more info see<br>
&gt;&gt;&gt; section 4.4 of <a href="http://www-plan.cs.colorado.edu/diwan/class-papers/mi.pdf" target="_blank">http://www-plan.cs.colorado.edu/diwan/class-papers/mi.pdf</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; Alrighty then. Right now, we&#39;re using the introspection information of the<br>
&gt;&gt; QGraphicsItem to resolve the class from the QGraphicsItem returned by<br>
&gt;&gt; itemAt() down to QGraphicsTextItem (so that we can use methods like<br>
&gt;&gt; toPlainText()).  But the pointer is still of QGraphicsItem type, so must be<br>
&gt;&gt; cast appropriately via smoke-&gt;cast(). I&#39;ll fix this tonight.<br>
&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Justin<br>
&gt;&gt;<br>
&gt;<br>
&gt;<br>
</div></div></blockquote></div><br>