diff --git a/bitbake/lib/bb/command.py b/bitbake/lib/bb/command.py index 3788207122..84fcdf9433 100644 --- a/bitbake/lib/bb/command.py +++ b/bitbake/lib/bb/command.py @@ -264,6 +264,10 @@ class CommandsSync: features = params[0] command.cooker.setFeatures(features) + # although we change the internal state of the cooker, this is transparent since + # we always take and leave the cooker in state.initial + setFeatures.readonly = True + class CommandsAsync: """ A class of asynchronous commands diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index e6916a621b..f41f5946ae 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py @@ -159,6 +159,9 @@ class BBCooker: self.state = state.forceshutdown def setFeatures(self, features): + # we only accept a new feature set if we're in state initial, so we can reset without problems + if self.state != state.initial: + raise Exception("Illegal state for feature set change") original_featureset = list(self.featureset) for feature in features: self.featureset.setFeature(feature) diff --git a/bitbake/lib/bb/server/xmlrpc.py b/bitbake/lib/bb/server/xmlrpc.py index bf867b584b..5dcaa6c7b0 100644 --- a/bitbake/lib/bb/server/xmlrpc.py +++ b/bitbake/lib/bb/server/xmlrpc.py @@ -292,7 +292,7 @@ class BitBakeXMLRPCServerConnection(BitBakeBaseServerConnection): _, error = self.connection.runCommand(["setFeatures", self.featureset]) if error: - logger.error("Unable to set the cooker to the correct featureset: %s" % error) + # no need to log it here, the error shall be sent to the client raise BaseException(error) return self