Created
May 20, 2010 00:47
-
-
Save ry/407051 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From 9d9f31ed8d8e9fb556e15363caf410cdc27c3c54 Mon Sep 17 00:00:00 2001 | |
From: Ryan Dahl <ry@tinyclouds.org> | |
Date: Wed, 19 May 2010 17:45:21 -0700 | |
Subject: [PATCH] Fix HandleScopes | |
--- | |
binding.cc | 25 +++++++++++++++++-------- | |
1 files changed, 17 insertions(+), 8 deletions(-) | |
diff --git a/binding.cc b/binding.cc | |
index ffec828..591c3cc 100644 | |
--- a/binding.cc | |
+++ b/binding.cc | |
@@ -36,6 +36,7 @@ pcap_t *pcap_handle; | |
Buffer *buffer; | |
void packet_ready(u_char *callback_p, const struct pcap_pkthdr* pkthdr, const u_char* packet) { | |
+ HandleScope scope; | |
static int count = 1; | |
// fprintf(stderr, "packet no: %d, %ld.%d, length: %d\n", count, pkthdr->ts.tv_sec, pkthdr->ts.tv_usec, pkthdr->len); | |
// fflush(stderr); | |
@@ -114,6 +115,8 @@ int open_live(char *dev, char *filter, char *errbuf) { | |
Handle<Value> | |
Dispatch(const Arguments& args) | |
{ | |
+ HandleScope scope; | |
+ | |
if (args.Length() != 2) { | |
return ThrowException(Exception::TypeError(String::New("Dispatch takes exactly two arguments"))); | |
} | |
@@ -132,7 +135,7 @@ Handle<Value> | |
int packet_count = pcap_dispatch(pcap_handle, 1, packet_ready, (u_char *)&callback); | |
- return Integer::NewFromUnsigned(packet_count); | |
+ return scope.Close(Integer::NewFromUnsigned(packet_count)); | |
} | |
Handle<Value> | |
@@ -152,16 +155,22 @@ Handle<Value> | |
int link_type = pcap_datalink(pcap_handle); | |
+ Local<Value> ret; | |
switch (link_type) { | |
case DLT_NULL: | |
- return String::New("LINKTYPE_NULL"); | |
+ ret = String::New("LINKTYPE_NULL"); | |
+ break; | |
case DLT_EN10MB: | |
- return String::New("LINKTYPE_ETHERNET"); | |
+ ret = String::New("LINKTYPE_ETHERNET"); | |
+ break; | |
case DLT_IEEE802_11: | |
- return String::New("LINKTYPE_IEEE802_11"); | |
+ ret = String::New("LINKTYPE_IEEE802_11"); | |
+ break; | |
default: | |
- return String::New("Unknown"); | |
+ ret = String::New("Unknown"); | |
+ break; | |
} | |
+ return scope.Close(ret); | |
} | |
Handle<Value> | |
@@ -221,7 +230,7 @@ Handle<Value> | |
} | |
pcap_freealldevs(alldevsp); | |
- return DevsArray; | |
+ return scope.Close(DevsArray); | |
} | |
Handle<Value> | |
@@ -241,7 +250,7 @@ Handle<Value> | |
int fd = pcap_get_selectable_fd(pcap_handle); | |
- return Integer::NewFromUnsigned(fd); | |
+ return scope.Close(Integer::NewFromUnsigned(fd)); | |
} | |
Handle<Value> | |
@@ -262,7 +271,7 @@ Handle<Value> | |
stats_obj->Set(String::New("ps_drop"), Integer::NewFromUnsigned(ps.ps_drop)); | |
stats_obj->Set(String::New("ps_ifdrop"), Integer::NewFromUnsigned(ps.ps_ifdrop)); | |
- return stats_obj; | |
+ return scope.Close(stats_obj); | |
} | |
extern "C" void init (Handle<Object> target) | |
-- | |
1.6.6 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment