From 0c04d1850fa557b8d89b9c5b28c8a245dd6779e9 Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Wed, 5 Dec 2012 20:50:40 +0000 Subject: [PATCH] Fix an old bug in devd, where it uses std::sort() to sort the various lists it reads from its configuration files on the priority field. Because some items in the lists have the same priority, and std::sort() is not stable, the exact order in which the items are enumerated does not have to correspond to the order they appear in the configuration files. Apparently this was never noticed with libstdc++, but with libc++ it could cause the "uhid" entry from /etc/devd/usb.conf to be used instead of the "ums" entry (which is earlier in the file). This caused the problem described in the PR: the USB mouse module was never loaded, and the other actions (such as starting moused) were not executed. To fix the problem, make devd use std:stable_sort() instead. Reported by: Jan Beich PR: bin/172958 MFC after: 2 weeks --- sbin/devd/devd.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbin/devd/devd.cc b/sbin/devd/devd.cc index 772471985a13..fa75c3f58c08 100644 --- a/sbin/devd/devd.cc +++ b/sbin/devd/devd.cc @@ -445,7 +445,7 @@ public: void config::sort_vector(vector &v) { - sort(v.begin(), v.end(), epv_greater()); + stable_sort(v.begin(), v.end(), epv_greater()); } void