1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
--- ../SrcUnix/EmTransportSerialUnix.cpp.orig Fri Mar 30 11:41:13 2001
+++ ../SrcUnix/EmTransportSerialUnix.cpp Fri Mar 30 11:47:36 2001
@@ -382,9 +382,9 @@
EmHostTransportSerial::EmHostTransportSerial (void) :
fReadThread (NULL),
fWriteThread (NULL),
- fCommHandle (0),
- fCommSignalPipeA (0),
- fCommSignalPipeB (0),
+ fCommHandle (-1),
+ fCommSignalPipeA (-1),
+ fCommSignalPipeB (-1),
fTimeToQuit (false),
fDataMutex (),
fDataCondition (&fDataMutex),
@@ -412,9 +412,9 @@
{
assert (fReadThread == NULL);
assert (fWriteThread == NULL);
- assert (fCommHandle == 0);
- assert (fCommSignalPipeA == 0);
- assert (fCommSignalPipeB == 0);
+ assert (fCommHandle == -1);
+ assert (fCommSignalPipeA == -1);
+ assert (fCommSignalPipeB == -1);
}
@@ -450,7 +450,7 @@
if (fCommHandle <= 0)
{
- fCommHandle = 0;
+ fCommHandle = -1;
return errno;
}
@@ -480,7 +480,7 @@
ErrCode EmHostTransportSerial::CreateCommThreads (const EmTransportSerial::ConfigSerial& /*config*/)
{
- if (fCommHandle)
+ if (fCommHandle != -1)
{
PRINTF ("EmTransportSerial::HostOpen: Creating serial port handler threads...");
@@ -525,35 +525,38 @@
// Signal the threads to quit.
- fDataMutex.lock ();
+ if ( fCommSignalPipeA != -1 && fCommSignalPipeB != -1 ) {
+ fDataMutex.lock ();
+
+ fTimeToQuit = true;
+
+ int dummy = 0;
+ write (fCommSignalPipeB, &dummy, sizeof (dummy)); // Signals CommRead.
- fTimeToQuit = true;
+ fDataCondition.broadcast (); // Signals CommWrite.
+ fDataMutex.unlock ();
- int dummy = 0;
- write (fCommSignalPipeB, &dummy, sizeof (dummy)); // Signals CommRead.
+ // Wait for the threads to quit.
- fDataCondition.broadcast (); // Signals CommWrite.
- fDataMutex.unlock ();
-
- // Wait for the threads to quit.
+ if (fReadThread)
+ {
+ fReadThread->join (NULL);
+ fWriteThread->join (NULL);
+ }
- if (fReadThread)
- {
- fReadThread->join (NULL);
- fWriteThread->join (NULL);
- }
+ // Thread objects delete themselves, so set our references to NULL.
- // Thread objects delete themselves, so set our references to NULL.
+ fReadThread = NULL;
+ fWriteThread = NULL;
- fReadThread = NULL;
- fWriteThread = NULL;
+ // Close the signal pipe.
- // Close the signal pipe.
+ close (fCommSignalPipeA);
+ close (fCommSignalPipeB);
- close (fCommSignalPipeA);
- close (fCommSignalPipeB);
+ fCommSignalPipeA = fCommSignalPipeB = 0;
- fCommSignalPipeA = fCommSignalPipeB = 0;
+ }
return errNone;
}
@@ -573,11 +576,13 @@
ErrCode EmHostTransportSerial::CloseCommPort (void)
{
- (void) close (fCommHandle);
-
- fCommHandle = 0;
-
- return errNone;
+ if ( fCommHandle != -1 ) {
+ int result = close (fCommHandle);
+
+ fCommHandle = -1;
+ }
+
+ return errNone;
}
|