@@ -97,15 +97,15 @@ [data[i] release]; [super dealloc]; } -- set: (OFObject*)key +- set: (OFObject *)key to: (OFObject*)obj { uint32_t hash; - of_list_object_t *iter; + of_list_object_t *iter, *key_obj; if (key == nil || obj == nil) @throw [OFInvalidArgumentException newWithClass: isa andSelector: _cmd]; @@ -122,12 +122,23 @@ return self; } } - [data[hash] append: key]; - [data[hash] append: obj]; + key = [key copy]; + @try { + key_obj = [data[hash] append: key]; + } @finally { + [key release]; + } + + @try { + [data[hash] append: obj]; + } @catch (OFException *e) { + [data[hash] remove: key_obj]; + @throw e; + } return self; } - (id)get: (OFObject*)key