aboutsummaryrefslogtreecommitdiffstats
path: root/palm/pose/files/patch-ae
blob: 5fbbfbfd939777668e91f88c851422064148df69 (plain) (blame)
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;
 }