Fix seg fault when producer with same name is created. (#110)

diff --git a/pulsar/impl_producer.go b/pulsar/producer_impl.go
similarity index 98%
rename from pulsar/impl_producer.go
rename to pulsar/producer_impl.go
index 6054402..ef0119e 100644
--- a/pulsar/impl_producer.go
+++ b/pulsar/producer_impl.go
@@ -93,8 +93,9 @@
 		if ok {
 			if pe.err != nil {
 				err = pe.err
+			} else {
+				p.producers[pe.partition] = pe.prod
 			}
-			p.producers[pe.partition] = pe.prod
 		}
 	}
 
diff --git a/pulsar/impl_partition_producer.go b/pulsar/producer_partition.go
similarity index 99%
rename from pulsar/impl_partition_producer.go
rename to pulsar/producer_partition.go
index 4e2ffd9..474401a 100644
--- a/pulsar/impl_partition_producer.go
+++ b/pulsar/producer_partition.go
@@ -107,7 +107,7 @@
 		return nil, err
 	}
 
-	p.log = p.log.WithField("name", *p.producerName)
+	p.log = p.log.WithField("name", p.producerName)
 	p.log.Info("Created producer")
 	p.state = producerReady
 
diff --git a/pulsar/producer_test.go b/pulsar/producer_test.go
index d6c8599..196c7f3 100644
--- a/pulsar/producer_test.go
+++ b/pulsar/producer_test.go
@@ -495,3 +495,31 @@
 	assert.Nil(t, err)
 	defer consumer.Close()
 }
+
+func TestProducerDuplicateNameOnSameTopic(t *testing.T) {
+	client, err := NewClient(ClientOptions{
+		URL: serviceURL,
+	})
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client.Close()
+
+	topicName := newTopicName()
+	producerName := "my-producer"
+
+	p1, err := client.CreateProducer(ProducerOptions{
+		Topic: topicName,
+		Name:  producerName,
+	})
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer p1.Close()
+
+	_, err = client.CreateProducer(ProducerOptions{
+		Topic: topicName,
+		Name:  producerName,
+	})
+	assert.NotNil(t, err, "expected error when creating producer with same name")
+}