Fix invalid types, null pointer use, memory leak

Closes #612.
diff --git a/src/cocoa_window.m b/src/cocoa_window.m
index 54d528a..b7486ad 100644
--- a/src/cocoa_window.m
+++ b/src/cocoa_window.m
@@ -739,6 +739,7 @@
     [[appMenu addItemWithTitle:@"Services"
                        action:NULL
                 keyEquivalent:@""] setSubmenu:servicesMenu];
+    [servicesMenu release];
     [appMenu addItem:[NSMenuItem separatorItem]];
     [appMenu addItemWithTitle:[NSString stringWithFormat:@"Hide %@", appName]
                        action:@selector(hide:)
@@ -757,6 +758,7 @@
 
     NSMenuItem* windowMenuItem =
         [bar addItemWithTitle:@"" action:NULL keyEquivalent:@""];
+    [bar release];
     NSMenu* windowMenu = [[NSMenu alloc] initWithTitle:@"Window"];
     [NSApp setWindowsMenu:windowMenu];
     [windowMenuItem setSubmenu:windowMenu];
diff --git a/src/iokit_joystick.m b/src/iokit_joystick.m
index ebce5c8..f21b2bf 100644
--- a/src/iokit_joystick.m
+++ b/src/iokit_joystick.m
@@ -352,7 +352,7 @@
     if (result)
     {
         CFNumberRef pageRef = CFNumberCreate(kCFAllocatorDefault,
-                                             kCFNumberIntType,
+                                             kCFNumberLongType,
                                              &usagePage);
         if (pageRef)
         {
@@ -362,7 +362,7 @@
             CFRelease(pageRef);
 
             CFNumberRef usageRef = CFNumberCreate(kCFAllocatorDefault,
-                                                  kCFNumberIntType,
+                                                  kCFNumberLongType,
                                                   &usage);
             if (usageRef)
             {
@@ -421,11 +421,11 @@
             CFArrayAppendValue(matchingCFArrayRef, matchingCFDictRef);
             CFRelease(matchingCFDictRef);
         }
-    }
 
-    IOHIDManagerSetDeviceMatchingMultiple(_glfw.iokit_js.managerRef,
-                                          matchingCFArrayRef);
-    CFRelease(matchingCFArrayRef);
+        IOHIDManagerSetDeviceMatchingMultiple(_glfw.iokit_js.managerRef,
+                                              matchingCFArrayRef);
+        CFRelease(matchingCFArrayRef);
+    }
 
     IOHIDManagerRegisterDeviceMatchingCallback(_glfw.iokit_js.managerRef,
                                                &matchCallback, NULL);