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