##// END OF EJS Templates
merge with stable
Augie Fackler -
r46426:61d63a77 merge default
parent child Browse files
Show More
@@ -8,6 +8,7 b''
8 */
8 */
9
9
10 #include <assert.h>
10 #include <assert.h>
11 #include <dirent.h>
11 #include <errno.h>
12 #include <errno.h>
12 #include <fcntl.h>
13 #include <fcntl.h>
13 #include <signal.h>
14 #include <signal.h>
@@ -269,6 +270,31 b' static void execcmdserver(const struct c'
269 }
270 }
270 }
271 }
271
272
273 /* close any open files to avoid hanging locks */
274 DIR *dp = opendir("/proc/self/fd");
275 if (dp != NULL) {
276 debugmsg("closing files based on /proc contents");
277 struct dirent *de;
278 while ((de = readdir(dp))) {
279 char *end;
280 long fd_value = strtol(de->d_name, &end, 10);
281 if (end == de->d_name) {
282 /* unable to convert to int (. or ..) */
283 continue;
284 }
285 if (errno == ERANGE) {
286 debugmsg("tried to parse %s, but range error occurred", de->d_name);
287 continue;
288 }
289 if (fd_value > STDERR_FILENO) {
290 int res = close(fd_value);
291 if (res) {
292 debugmsg("tried to close fd %ld: %d (errno: %d)", fd_value, res, errno);
293 }
294 }
295 }
296 }
297
272 if (putenv("CHGINTERNALMARK=") != 0)
298 if (putenv("CHGINTERNALMARK=") != 0)
273 abortmsgerrno("failed to putenv");
299 abortmsgerrno("failed to putenv");
274 if (execvp(hgcmd, (char **)argv) < 0)
300 if (execvp(hgcmd, (char **)argv) < 0)
@@ -1250,7 +1250,7 b' class curseschunkselector(object):'
1250 self.numstatuslines,
1250 self.numstatuslines,
1251 0,
1251 0,
1252 self.yscreensize - self.numstatuslines,
1252 self.yscreensize - self.numstatuslines,
1253 self.xscreensize,
1253 self.xscreensize - 1,
1254 )
1254 )
1255 except curses.error:
1255 except curses.error:
1256 pass
1256 pass
General Comments 0
You need to be logged in to leave comments. Login now