pyverbs: Fix WR destructor typo leaking SGE buffers

Work-request helper objects never ran their finalizers because the
Cython destructor was misspelled, so malloc'd scatter-gather buffers
were leaked on every GC cycle. Rename to the correct special method
so cleanup runs automatically.

Signed-off-by: Maxim Chicherin <maximc@nvidia.com>
Signed-off-by: Shachar Kagan <skagan@nvidia.com>
diff --git a/pyverbs/wr.pyx b/pyverbs/wr.pyx
index 87297d6..5f91e01 100644
--- a/pyverbs/wr.pyx
+++ b/pyverbs/wr.pyx
@@ -35,11 +35,13 @@
         self.sge.length = length
         self.sge.lkey = lkey
 
-    def __dealloc(self):
+    def __dealloc__(self):
         self.close()
 
     cpdef close(self):
-        free(self.sge)
+        if self.sge != NULL:
+            free(self.sge)
+            self.sge = NULL
 
     cpdef read(self, length, offset):
         """
@@ -105,11 +107,13 @@
         if next_wr is not None:
             self.recv_wr.next = &next_wr.recv_wr
 
-    def __dealloc(self):
+    def __dealloc__(self):
         self.close()
 
     cpdef close(self):
-        free(self.recv_wr.sg_list)
+        if self.recv_wr.sg_list != NULL:
+            free(self.recv_wr.sg_list)
+            self.recv_wr.sg_list = NULL
 
     def __str__(self):
         print_format = '{:22}: {:<20}\n'
@@ -180,11 +184,13 @@
         self.send_wr.imm_data = imm_data
         self.ah = None
 
-    def __dealloc(self):
+    def __dealloc__(self):
         self.close()
 
     cpdef close(self):
-        free(self.send_wr.sg_list)
+        if self.send_wr.sg_list != NULL:
+            free(self.send_wr.sg_list)
+            self.send_wr.sg_list = NULL
 
     def __str__(self):
         print_format = '{:22}: {:<20}\n'