Index: trunk/psModules/src/config/pmConfig.c
===================================================================
--- trunk/psModules/src/config/pmConfig.c	(revision 17514)
+++ trunk/psModules/src/config/pmConfig.c	(revision 17524)
@@ -1319,4 +1319,13 @@
 }
 
+// XXX this is a prime example of the failing of our error-handling system.  this function has
+// three possible outcomes: the argument was found, it was not found, or we raised an error.
+// returning only the bool does not distinguish failure to find the argument from a deeper
+// error.  requiring the calling function to both test the bool AND trap the error stack is
+// fragile: the error stack may not have been cleared, or they may not do both.  in some
+// places, we solve this by returning two types of boolean status values.  a better option
+// might be to return a psErrorCode value (as RHL proposed), which would be 0 on success and
+// any of several options on failure.
+
 bool pmConfigFileSetsMD(psMetadata *metadata, int *argc, char **argv, const char *name,
                         const char *file, const char *list)
@@ -1328,6 +1337,13 @@
     // if files->n == 0 we'll want to call psError(..., false, ...)
     psArray *files = pmConfigFileSets(argc, argv, file, list);
+    if (!files) {
+        psAbort("error parsing argument list");
+        psError(PS_ERR_IO, false, "error parsing argument list");
+        psFree (files);
+        return false;
+    }
+
+    // no files found: this is not really an error 
     if (files->n == 0) {
-        // psError(PS_ERR_IO, false, "pmConfigFileSets failed to find %s in the argument list", name);
         psFree (files);
         return false;
