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")
+}