Index: uspace/lib/drv/generic/driver.c
===================================================================
--- uspace/lib/drv/generic/driver.c	(revision 5c55eb7a094000c385bfd4763df91d81b2abe3c8)
+++ uspace/lib/drv/generic/driver.c	(revision 5caad1d4a9774280b120ed9f9da51f4bb6f1f4bf)
@@ -1046,4 +1046,7 @@
 errno_t ddf_driver_main(const driver_t *drv)
 {
+	port_id_t drv_port;
+	port_id_t devman_port;
+
 	/*
 	 * Remember the driver structure - driver_ops will be called by generic
@@ -1056,7 +1059,6 @@
 	 * incoming connections.
 	 */
-	port_id_t port;
-	errno_t rc = async_create_port(INTERFACE_DDF_DRIVER, driver_connection_driver,
-	    NULL, &port);
+	errno_t rc = async_create_port(INTERFACE_DDF_DRIVER,
+	    driver_connection_driver, NULL, &drv_port);
 	if (rc != EOK) {
 		printf("Error: Failed to create driver port.\n");
@@ -1065,7 +1067,8 @@
 
 	rc = async_create_port(INTERFACE_DDF_DEVMAN, driver_connection_devman,
-	    NULL, &port);
+	    NULL, &devman_port);
 	if (rc != EOK) {
 		printf("Error: Failed to create devman port.\n");
+		async_port_destroy(drv_port);
 		return rc;
 	}
@@ -1078,5 +1081,6 @@
 		    "(%s).\n", (rc == EEXIST) ? "driver already started" :
 		    str_error(rc));
-
+		async_port_destroy(devman_port);
+		async_port_destroy(drv_port);
 		return rc;
 	}
@@ -1086,4 +1090,7 @@
 	if (rc != EOK) {
 		printf("Error: Failed returning task value.\n");
+		// XXX devman_driver_unregister
+		async_port_destroy(devman_port);
+		async_port_destroy(drv_port);
 		return rc;
 	}
