Added comment to explain hazards of enabling debug trace 3.35.00.04_eng
authorRamsey Harris <ramsey@ti.com>
Fri, 13 Feb 2015 01:59:26 +0000 (17:59 -0800)
committerRobert Tivy <rtivy@ti.com>
Fri, 13 Feb 2015 19:02:05 +0000 (11:02 -0800)
SocketFxns.c is used by both LAD and TransportRpmsg. When debug
trace is enabled in LAD, it can cause data corruption. I explain
this in the comment and provide advice.

linux/src/utils/SocketFxns.c

index 7c9708339d5905b10d590f057ed0baa478e641f4..acef72ec4c04431c82eb6376ec2276b600a18a81 100644 (file)
 /* For MultiProc id to remoteproc index map */
 #include <_MultiProc.h>
 
-/* traces in this file are controlled via _SocketFxns_verbose */
+/*  Traces in this file are controlled via _SocketFxns_verbose
+ *
+ *  Caution! This file is used by both LAD and TransportRpmsg. The
+ *  PRINTVERBOSE macros use printf(), which sends its output to
+ *  STDOUT (fd = 0). However, LAD closes STDOUT and by unfortunate
+ *  chance, the file descriptor zero (fd = 0) is reused for the outbound
+ *  pipe to the first client. This means all trace messages go into
+ *  the pipe and corrupt the data on the client side.
+
+ *  If you want to enable this trace for LAD, in addition to setting
+ *  _SocketFxns_versbose to TRUE below, you must also comment out the
+ *  three calls to close() in linux/src/daemon/lad.c:
+ *
+ *      close(STDIN_FILENO);
+ *      close(STDOUT_FILENO);
+ *      close(STDERR_FILENO);
+ *
+ *  If you only want to enable trace in the client (i.e. calls from
+ *  TransportRpmsg), then simply set the environment variable IPC_DEBUG
+ *  (to either 2 or 3) before you run your program.
+ *
+ *  IPC_DEBUG=3 ./app_host
+ */
 Bool _SocketFxns_verbose = FALSE;
 #define verbose _SocketFxns_verbose