Mercurial > hg > xemacs-beta
comparison src/event-unixoid.c @ 5027:22179cd0fe15
merge
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Wed, 10 Feb 2010 07:25:19 -0600 |
parents | 2ade80e8c640 |
children | 308d34e9f07d |
comparison
equal
deleted
inserted
replaced
5026:46cf825f6158 | 5027:22179cd0fe15 |
---|---|
98 | 98 |
99 if (CONSOLE_TTY_P (con)) | 99 if (CONSOLE_TTY_P (con)) |
100 ch = Lstream_get_ichar (XLSTREAM (CONSOLE_TTY_DATA (con)->instream)); | 100 ch = Lstream_get_ichar (XLSTREAM (CONSOLE_TTY_DATA (con)->instream)); |
101 else | 101 else |
102 { | 102 { |
103 Ibyte byte; | 103 Ibyte ibyte; |
104 /* #### Definitely something strange here. We should be setting | 104 /* #### Definitely something strange here. We should be setting |
105 the stdio handle unbuffered and reading from it instead of mixing | 105 the stdio handle unbuffered and reading from it instead of mixing |
106 stdio and raw io calls. */ | 106 stdio and raw io calls. */ |
107 int nread = retry_read (fileno (CONSOLE_STREAM_DATA (con)->in), | 107 int nread = retry_read (fileno (CONSOLE_STREAM_DATA (con)->in), |
108 &byte, 1); | 108 &ibyte, 1); |
109 if (nread <= 0) | 109 if (nread <= 0) |
110 ch = -1; | 110 ch = -1; |
111 else | 111 else |
112 ch = byte; | 112 ch = ibyte; |
113 } | 113 } |
114 | 114 |
115 if (ch < 0) | 115 if (ch < 0) |
116 { | 116 { |
117 /* deleting the console might not be safe right now ... */ | 117 /* deleting the console might not be safe right now ... */ |
130 } | 130 } |
131 | 131 |
132 void | 132 void |
133 signal_fake_event (void) | 133 signal_fake_event (void) |
134 { | 134 { |
135 char byte = 0; | 135 Rawbyte rbyte = 0; |
136 /* We do the write always. Formerly I tried to "optimize" this | 136 /* We do the write always. Formerly I tried to "optimize" this |
137 by setting a flag indicating whether we're blocking and only | 137 by setting a flag indicating whether we're blocking and only |
138 doing the write in that case, but there is a race condition | 138 doing the write in that case, but there is a race condition |
139 if the signal occurs after we've checked for the signal | 139 if the signal occurs after we've checked for the signal |
140 occurrence (which could occur in many places throughout | 140 occurrence (which could occur in many places throughout |
146 | 146 |
147 if (signal_event_pipe_initialized) | 147 if (signal_event_pipe_initialized) |
148 /* In case a signal comes through while we're dumping */ | 148 /* In case a signal comes through while we're dumping */ |
149 { | 149 { |
150 int old_errno = errno; | 150 int old_errno = errno; |
151 retry_write (signal_event_pipe[1], &byte, 1); | 151 retry_write (signal_event_pipe[1], &rbyte, 1); |
152 errno = old_errno; | 152 errno = old_errno; |
153 } | 153 } |
154 } | 154 } |
155 | 155 |
156 void | 156 void |
157 drain_signal_event_pipe (void) | 157 drain_signal_event_pipe (void) |
158 { | 158 { |
159 char chars[128]; | 159 Rawbyte chars[128]; |
160 /* The input end of the pipe has been set to non-blocking. */ | 160 /* The input end of the pipe has been set to non-blocking. */ |
161 while (retry_read (signal_event_pipe[0], chars, sizeof (chars)) > 0) | 161 while (retry_read (signal_event_pipe[0], chars, sizeof (chars)) > 0) |
162 ; | 162 ; |
163 } | 163 } |
164 | 164 |