Revision: 76618
          http://sourceforge.net/p/brlcad/code/76618
Author:   starseeker
Date:     2020-07-31 21:12:55 +0000 (Fri, 31 Jul 2020)
Log Message:
-----------
Assign a magic number to the ged_subprocess structure.  This lets the callback 
validate that what was supplied in the void pointer is in fact the type of 
struct it is expecting.  Wouldn't be so bad if it just crashed reliably at that 
point, but hit a case in the handler refactoring where the wrong struct getting 
passed in had adverse but non-crashing effects - slow, ignoring keyboard input, 
etc.  Need to get this in place for the other callbacks, not just those using 
subprocesses.

Modified Paths:
--------------
    brlcad/branches/bioh/include/ged/defines.h
    brlcad/branches/bioh/src/libged/ged_util.c
    brlcad/branches/bioh/src/libged/rtcheck/rtcheck.c
    brlcad/branches/bioh/src/libged/rtwizard/rtwizard.c

Modified: brlcad/branches/bioh/include/ged/defines.h
===================================================================
--- brlcad/branches/bioh/include/ged/defines.h  2020-07-31 20:44:27 UTC (rev 
76617)
+++ brlcad/branches/bioh/include/ged/defines.h  2020-07-31 21:12:55 UTC (rev 
76618)
@@ -124,6 +124,7 @@
 
 
 struct ged_subprocess {
+    uint32_t magic;         /**< @brief magic number */
     struct bu_process *p;
     void *chan;
     int aborted;

Modified: brlcad/branches/bioh/src/libged/ged_util.c
===================================================================
--- brlcad/branches/bioh/src/libged/ged_util.c  2020-07-31 20:44:27 UTC (rev 
76617)
+++ brlcad/branches/bioh/src/libged/ged_util.c  2020-07-31 21:12:55 UTC (rev 
76618)
@@ -1309,6 +1309,8 @@
     if ((rrtp == (struct ged_subprocess *)NULL) || (rrtp->gedp == (struct ged 
*)NULL))
        return;
 
+    BU_CKMAG(rrtp, GED_CMD_MAGIC, "ged subprocess");
+
     struct ged *gedp = rrtp->gedp;
 
     /* Get data from rt */
@@ -1443,6 +1445,7 @@
     bu_process_close(p, BU_PROCESS_STDIN);
 
     BU_GET(run_rtp, struct ged_subprocess);
+    run_rtp->magic = GED_CMD_MAGIC;
     bu_ptbl_ins(&gedp->ged_subp, (long *)run_rtp);
 
     run_rtp->p = p;

Modified: brlcad/branches/bioh/src/libged/rtcheck/rtcheck.c
===================================================================
--- brlcad/branches/bioh/src/libged/rtcheck/rtcheck.c   2020-07-31 20:44:27 UTC 
(rev 76617)
+++ brlcad/branches/bioh/src/libged/rtcheck/rtcheck.c   2020-07-31 21:12:55 UTC 
(rev 76618)
@@ -79,6 +79,7 @@
     int value = 0;
     struct ged_rtcheck *rtcp = (struct ged_rtcheck *)clientData;
     struct ged_subprocess *rrtp = rtcp->rrtp;
+    BU_CKMAG(rrtp, GED_CMD_MAGIC, "ged subprocess");
     struct ged *gedp = rrtp->gedp;
 
     /* Get vector output from rtcheck */
@@ -142,6 +143,7 @@
     char line[RT_MAXLINE] = {0};
     struct ged_rtcheck *rtcp = (struct ged_rtcheck *)clientData;
     struct ged_subprocess *rrtp = rtcp->rrtp;
+    BU_CKMAG(rrtp, GED_CMD_MAGIC, "ged subprocess");
     struct ged *gedp = rrtp->gedp;
 
     /* Get textual output from rtcheck */
@@ -266,6 +268,7 @@
 
     /* create the ged_subprocess container */
     BU_GET(rtcp->rrtp, struct ged_subprocess);
+    rtcp->rrtp->magic = GED_CMD_MAGIC;
     rtcp->rrtp->p = p;
     rtcp->rrtp->aborted = 0;
     rtcp->rrtp->gedp = gedp;

Modified: brlcad/branches/bioh/src/libged/rtwizard/rtwizard.c
===================================================================
--- brlcad/branches/bioh/src/libged/rtwizard/rtwizard.c 2020-07-31 20:44:27 UTC 
(rev 76617)
+++ brlcad/branches/bioh/src/libged/rtwizard/rtwizard.c 2020-07-31 21:12:55 UTC 
(rev 76618)
@@ -56,6 +56,7 @@
     }
 
     BU_GET(run_rtp, struct ged_subprocess);
+    run_rtp->magic = GED_CMD_MAGIC;
     bu_ptbl_ins(&gedp->ged_subp, (long *)run_rtp);
 
     run_rtp->p = p;

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to